我使用了一个async函数来等待promise的结算并将结果存储在一个变量中。但它并不是在承诺被拒绝的情况下储存。坚定承诺是坚强的结果,拒绝承诺则不是坚强的结果。如有任何帮助,我将不胜感激。
async function umar() {
let somevar = false;
let myPromise = new Promise((resolve, reject) => {
if (somevar === true) {
console.log('I am resolved');
resolve('resolved')
}
else {
console.log('I am rejected.')
reject('rejected')
}
})
let myprom = await myPromise
console.log(myprom)
return myprom
}
let a = umar()
a.then((value)=>{
console.log(value)
},()=>{console.log('I got an error.')})
我期望await在两种情况下(当promise被拒绝和resolve时)都将值存储在变量中,但在promise被拒绝时它没有这样做。
这就是await
的工作原理。当承诺被拒绝时,它是throws
,如果你想在本地看到错误,你必须在本地用try/catch
捕获错误。当myPromise
拒绝时,您的赋值语句let myprom = await myPromise
将不会执行。
承诺拒绝必须在.catch()
中被捕获,第二次回调到.then(fn1, fn2)
,或者,如果在await
周围使用await
和try/catch
(或者有时您让拒绝从async
函数传播出去,调用者可以捕获拒绝。
在您的umar()
函数中,当myPromise
拒绝时,该函数将抛出await myPromise
点,并且返回的异步父函数的承诺将以myPromise拒绝的相同错误拒绝(因为async
函数自动捕获throw
并将其转换为拒绝或其承诺)。您可以在await
周围包装try/catch
来捕获错误,或者在您的代码示例中,您可以在调用umar()
的地方捕获您已经在做的错误。如果您在那里记录实际的错误,您将看到您期望的错误:
let a = umar();
a.then((value) => {
console.log(value)
}, (err) => {
// log the error
console.log('I got an error.', err);
});