HarmonyOS 鸿蒙Next 获取时间戳,md5 加密,都需要异步的问题

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 获取时间戳,md5 加密,都需要异步的问题

刚接触鸿蒙开发,很多东西也不懂,也没太多开发经验。说错请见谅哈。就是我们在请求接口的时候,需要加密,时间戳之类的内容,根据文档的示例,发现有很多操作都要异步获取结果。是否有更简洁的方法呢。

cke_122.png

cke_357.png

8 回复
Ctrl+鼠标,点击去看到方向返回类型,如果是Promise这种的,那就可以用单写一个async方法,里面用await接收成功值。

例:

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。

回到顶部