HarmonyOS 鸿蒙Next 获取时间戳,md5 加密,都需要异步的问题
HarmonyOS 鸿蒙Next 获取时间戳,md5 加密,都需要异步的问题
刚接触鸿蒙开发,很多东西也不懂,也没太多开发经验。说错请见谅哈。就是我们在请求接口的时候,需要加密,时间戳之类的内容,根据文档的示例,发现有很多操作都要异步获取结果。是否有更简洁的方法呢。
例:
function getPreferences(context: Context, name: string): Promise<Preferences>;
我封装的工具就是这样做的。
https://developer.huawei.com/consumer/cn/blog/topic/03146416496480017
异步其实是个好东东,只是因为思路需要转换,一开始不太习惯;多用用找到感觉后就知道香不香了:)
await 作为异步转换成类似同步的方法可以用,但不建议大量用,否则失去了异步的价值,而且可能会将同步的缺陷带过来,造成UI阻塞问题;异步方式本来对UI性能是有很大优化的,具体的写了一篇短文说明:
https://developer.huawei.com/consumer/cn/forum/topic/0201148145311180335?fid=0101587866109860105
尤其是耗时操作,如 文件读写、网络访问、加密解密等,异步应该是首选;因为异步相当于之前开不同线程的效果;大大减少UI阻塞的可能性;而且目前鸿蒙API中的接口主流都是异步方法;文件操作中留有少量同步方法;这样的选择一定是有原因的。
await 会暂停当前函数的执行,等待异步操作完成并获取结果后,再继续执行后面的代码。然而,这个暂停是在异步的环境中进行的,不会导致整个程序或 UI 线程被阻塞。
谢谢哈,这个async/await 当时理解不深,可能误导同学们了:) 现在知道了这是和Promise配套的异步机制,之前如有被误导的同学说声对不起哈 :) 个人新学JS经历: 1、先从同步代码转换为异步代码,首先理解了Callback 回调方式,觉得可将函数当作参数传递是个不错的语法; 2、开始研究Promise的用法,之前觉得有点乱,自己封装功能用回调比较快上手,Promise总觉得有点别扭,一直没找到感觉,后来看了Mozilla网站上的 JS 文档,找到一篇有关 Promise 比较深入的文章后才有点理解了Promise的具体使用; 3、看到不少同学用async/await来实现同步形式的异步代码,需要再练习练习如何最有效地使用; 今后有心得了再来分享。
时间戳,这样试试
let requestStartTime = new Date().getTime()
这个可以。
使用await,类似这样
let t = await systemDateTime.getCurrentTime()
在HarmonyOS(鸿蒙)开发中,获取时间戳和MD5加密操作本身并不强制要求异步执行,但如果你需要在UI线程之外进行这些操作以避免阻塞UI,可以使用异步任务。
对于获取时间戳,可以直接使用System.currentTimeMillis()
或java.time.Instant.now().toEpochMilli()
,这些操作都是快速的,不需要异步。
对于MD5加密,可以使用Java的MessageDigest
类,这可能会稍微耗时,特别是在处理大量数据时。为了不影响UI响应,可以使用TaskExecutor.getIoExecutor().execute(Runnable)
来在后台线程执行MD5加密。
如果问题依旧没法解决请加我微信,我的微信是itying888。