鸿蒙异步任务类似于Android的AsyncTask

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值