HarmonyOS 鸿蒙Next关于async/await使用和setTimeout的问题,请求各位老师解答

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

HarmonyOS 鸿蒙Next关于async/await使用和setTimeout的问题,请求各位老师解答

import { promptAction } from ‘@kit.ArkUI’;

@Entry
@Component

struct Index {
@State message: string = ‘Hello World’;
funcA(){
setTimeout(()=>{
promptAction.showToast({
message:‘你好’
})
},3000)
}
funcB(){
promptAction.showToast(
{
message:‘世界~’
}
)
}
async funcC(){
await this.funcA()
this.funcB()
}
build() {
Column(){
Button(‘弹窗’)
.onClick(()=>{
this.funcC()
})

}
.justifyContent(FlexAlign.Center)
.width(‘100%’)
.height(‘100%’)
}
}

代码如上,为什么在funC里在funA使用了await的前缀,点击按钮后依旧是先弹出funB里的弹窗,而不是等待funA计时器里的事件完成之后再弹出呢

3 回复

await 不是写了就代表在这停顿,await 是 Promise 的语法糖, 应该这么写

```

funcA(): Promise<void> {
return new Promise((resolve) => {
setTimeout(() => {
console.log("你好~");
resolve()
}, 3000)
})
}

funcB() {
console.log("世界~");
}

async funcC() {
await this.funcA()
this.funcB()
}

```

settimeout它是非阻塞的 他只看自己的计时器

关于HarmonyOS 鸿蒙Next中async/await使用和setTimeout的问题,以下提供专业解答:

  1. async/await使用

    • async/await是处理异步操作的语法糖,适用于单次I/O任务场景,如网络请求、文件读写等。
    • 使用async声明异步函数,await等待Promise解析。
    • 异步操作出错时,应使用try/catch捕获异常。
  2. setTimeout问题

    • setTimeout在鸿蒙系统中可能因被误取消而导致业务逻辑不执行。
    • 检查代码中是否有不规范的clearInterval或clearTimeout调用,特别是TimerID初始化为0或在清空时未做判断的情况。
    • 为防止被误删除,可在第一个setTimeout前添加一个空的setTimeout(()=>{},0),或在clearTimeout前判空处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部