import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct PromiseTest {
build() {
Column(){
//方法一:直接使用promise,通过promist.then获取回调结果
Button("promise测试").onClick(()=>{
//promise类似android的AsyncTask,异步执行完耗时操作后,回调同步方法
const promise: Promise<number> = new Promise((resolve: Function, reject: Function) => {
//2秒之后执行回调函数,模拟耗时操作
setTimeout(() => {
const randomNumber: number = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject(new Error('Random number is too small'));
}
}, 2000);
})
//then获取异步操作返回的结果
promise.then((result: number) => {
console.info(`Random number is ${result}`);
}).catch((error: BusinessError) => {
console.error(error.message);
});
})
//方法二:通过async+await拿到异步操作返回结果
Button("promise async+await测试").onClick(
async () => {
let res = await myAsyncFunction();
console.info("res is: " + res);
}).margin({top:30});
}
}
}
/**
* async/await是一种用于处理异步操作的Promise语法糖
* 类似Java的futureTask可以等异步任务完成拿到返回结果
* 本来需要通过promise.then拿到结果,现在通过await直接拿到resolve里面的结果,
* 相当于是简化了
*/
async function myAsyncFunction(): Promise<string> {
const result: string = await new Promise((resolve: Function) => {
try{
//2秒后执行resolve方法,模拟耗时操作
setTimeout(() => {
resolve('async/await 返回:Hello, world!');
}, 2000);
}catch (e){
console.error(`Get exception: ${e}`);
resolve('async/await 出现异常');
}
});
console.info(result); // 输出: Hello, world!
return result;
}
鸿蒙异步任务类似于Android的AsyncTask
最新推荐文章于 2024-09-01 23:20:29 发布