HarmonyOS 鸿蒙Next 如果使用await修饰一个将会rejected的Promise对象,得到的结果是什么?

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

HarmonyOS 鸿蒙Next 如果使用await修饰一个将会rejected的Promise对象,得到的结果是什么?

根据 异步并发概述 (Promise和async/await) 这个文档描述,我们可以在async方法中对一个Promise对象使用await进行修饰,得到Promise对象在正常完成执行resolve的值。

那如果这个对象没有正常完成工作,执行了reject方法,相当于在普通的异步编程中走到了catch,那么这个被await修饰的Promise值是什么?还是就暂停在这里不再继续执行了?

我在模拟器执行如下代码,确实没有打印第2、3条日志

private static async getRSAKeyPair(key: string = PublicKey): Promise<cryptoFramework.KeyPair> {
    console.error("调用方法 getRSAKeyPair")
    let publicKeyBlobEncoding: cert.EncodingBlob = {
        data: Base64Utils.decode2Uint8Array(key),
        encodingFormat: cert.EncodingFormat.FORMAT_DER
    }
    let x509Cert = await cert.createX509Cert(publicKeyBlobEncoding)
    console.error(`调用方法 getRSAKeyPair, x509Cert = ${x509Cert}`)
    let x509PublicKey = x509Cert.getPublicKey()

    let rsaGenerator = cryptoFramework.createAsyKeyGenerator("RSA2048")
    let keyPair = rsaGenerator.convertKey(x509PublicKey.getEncoded(), null)

    console.error(`调用方法 getRSAKeyPair, keyPair = ${keyPair}`)
    return keyPair
}

更多关于HarmonyOS 鸿蒙Next 如果使用await修饰一个将会rejected的Promise对象,得到的结果是什么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

reject也可以被trycatch捕获,一种是你常见的trycatch,另一种是直接promise对应的方法后面跟着catch,比如

let x509Cert = await cert.createX509Cert(publicKeyBlobEncoding).catch((err) => {})

更多关于HarmonyOS 鸿蒙Next 如果使用await修饰一个将会rejected的Promise对象,得到的结果是什么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


使用try...catch不会破坏这个同步编写方式,可以正常return自己想要的值,

  • await只能拿到成功的结果,无法拿到失败的结果。

在HarmonyOS(鸿蒙Next)中,如果你使用await修饰一个将会被rejectedPromise对象,await将会抛出Promise被拒绝的原因。具体来说,await会暂停当前异步函数的执行,直到Promise被解决或拒绝。如果Promise被拒绝,await会将拒绝的原因作为异常抛出。你可以使用try...catch语句来捕获这个异常,并处理Promise被拒绝的情况。例如:

async function example() {
    try {
        const result = await Promise.reject(new Error('Rejected'));
    } catch (error) {
        console.error(error.message); // 输出: "Rejected"
    }
}

example();

在这个例子中,Promise.reject(new Error('Rejected'))创建了一个被拒绝的Promiseawait会抛出这个错误,catch块会捕获并处理这个错误。

在HarmonyOS(鸿蒙Next)中,如果使用await修饰一个将会rejectedPromise对象,代码执行会抛出异常,并且可以使用try...catch结构来捕获和处理这个异常。如果没有捕获异常,程序将会中断执行。例如:

async function example() {
  try {
    await Promise.reject("Error occurred");
  } catch (error) {
    console.error(error); // 输出: Error occurred
  }
}

在这个例子中,await会等待Promiserejected状态,并将错误传递给catch块进行处理。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!