HarmonyOS 鸿蒙Next 如果使用await修饰一个将会rejected的Promise对象,得到的结果是什么?
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
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
修饰一个将会被rejected
的Promise
对象,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'))
创建了一个被拒绝的Promise
,await
会抛出这个错误,catch
块会捕获并处理这个错误。
在HarmonyOS(鸿蒙Next)中,如果使用await
修饰一个将会rejected
的Promise
对象,代码执行会抛出异常,并且可以使用try...catch
结构来捕获和处理这个异常。如果没有捕获异常,程序将会中断执行。例如:
async function example() {
try {
await Promise.reject("Error occurred");
} catch (error) {
console.error(error); // 输出: Error occurred
}
}
在这个例子中,await
会等待Promise
的rejected
状态,并将错误传递给catch
块进行处理。