好久不写了,这篇文章就写一遍,鸿蒙应用最基本的线程写法。
Promise和async/await提供异步并发能力,是标准的JS异步语法。异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次I/O任务的场景开发,例如一次网络请求、一次文件读写等操作。
Promise是一种用于处理异步操作的对象,async/await是一种用于处理异步操作的Promise语法糖。
TaskPool(任务池)和Worker的作用是为应用程序提供一个多线程的运行环境,用于处理耗时的计算任务或其他密集型任务。可以有效地避免这些任务阻塞主线程,从而最大化系统的利用率,降低整体资源消耗,并提高系统的整体性能。
首先就用async写一个等待三秒更新ui的例子:
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
async hello(){
setTimeout(()=>{
this.message='世界 你好';
},3000);
}
aboutToAppear(){
this.hello();
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
好了,正文示例:
async网络请求:
async hello(){
let httpRequest = http.createHttp();
httpRequest.request("https://www.baidu.com",(err,data)=>{
// console.info('error:' + JSON.stringify(err));
this.message=JSON.stringify(data);
});
}
有异步就有同步,async与await搭配就可以实现同步,需要搭配promise使用,Promise有三种状态:pending(进行中)、fulfilled(已完成)和rejected(已拒绝),可对promise对象进行管理。Promise对象,同时传入一个带有两个参数的函数,通常称为executor函数,resolve和reject,分别表示异步操作成功和失败时的回调函数。
async hello(){
let result = await new Promise((resolve) => {
setTimeout(() => {
resolve('你好世界!');
}, 3000);
});
this.message=String(result)
}
aboutToAppear(){
this.hello();
}
并发下一篇见。