HarmonyOS鸿蒙Next有关async使用
HarmonyOS鸿蒙Next有关async使用 文档描述:Promise和async/await提供异步并发能力,是标准的JS异步语法。异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次I/O任务的场景开发,例如一次网络请求、一次文件读写等操作。
我测试了一下如果同时执行多个async函数时,Promise函数会在全部函数执行完才同时回调,这是不是表示不能大量使用async关键词,但是api基本都是使用async进行异步回调的,例如项目初始化时会用async同时初始化不同的功能api,这样会不会导致初始化的时间增加,还是说async的是有作用范围的,在不同的线程,或者UIAbility里面async是可以并发执行的。
测试代码:
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.test1().then(()=>{
Logger.info('test1>>end')
})
this.test2().then(()=>{
Logger.info('test2>>end')
})
})
}
.width('100%')
}
.height('100%')
}
async test1() {
const start = Date.now();
Logger.info('test1>>start')
while (Date.now() - start < 2000) {
}
Logger.info('test1>>return')
return true
}
async test2() {
const start = Date.now();
Logger.info('test2>>start')
while (Date.now() - start < 5000) {
}
Logger.info('test2>>return')
return true
}
日志信息:
06-17 16:02:46.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test1>>start, %{public}s
06-17 16:02:48.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test1>>return, %{public}s
06-17 16:02:48.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test2>>start, %{public}s
06-17 16:02:53.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test2>>return, %{public}s
06-17 16:02:53.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test1>>end, %{public}s
06-17 16:02:53.585 2604-2604 A0ff00/[Sample_Socket] com.kaipanla.flktest I test2>>end, %{public}s
更多关于HarmonyOS鸿蒙Next有关async使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,async
关键字用于定义异步函数。异步函数允许开发者在执行耗时操作时,不会阻塞主线程,从而提高应用的响应性能。异步函数通常与await
关键字配合使用,await
用于等待一个异步操作完成,并返回其结果。
在鸿蒙Next中,异步函数的基本语法如下:
async function myAsyncFunction() {
// 异步操作
let result = await someAsyncOperation();
return result;
}
在上述代码中,myAsyncFunction
是一个异步函数,someAsyncOperation
是一个异步操作。当await
遇到someAsyncOperation
时,函数会暂停执行,直到someAsyncOperation
完成并返回结果。
鸿蒙Next中的异步操作通常与Promise
对象相关联。Promise
表示一个异步操作的最终完成(或失败)及其结果值。异步函数会自动返回一个Promise
对象,该对象在函数执行完成后会被解析为函数的返回值。
例如:
function someAsyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("操作完成");
}, 1000);
});
}
async function myAsyncFunction() {
let result = await someAsyncOperation();
console.log(result); // 输出 "操作完成"
}
myAsyncFunction();
在这个例子中,someAsyncOperation
返回一个Promise
,该Promise
在1秒后被解析为字符串"操作完成"。myAsyncFunction
使用await
等待该Promise
解析,并在解析后输出结果。
鸿蒙Next中的异步编程模型与JavaScript标准中的异步编程模型基本一致,开发者可以使用async/await
语法来简化异步代码的编写,使其更易于理解和维护。