我在理解Javascript承诺方面遇到了一些麻烦,特别是将它们链接起来并将错误传递给链条。在以下代码中:
function myPromise() {
return new Promise((resolve, reject) => {
setTimeout(function() {
console.log('done')
reject('resolved');
}, 1000);
});
}
function myOtherPromise() {
return new Promise((resolve, reject) => {
myPromise().then(done => {
resolve(done);
}).catch(e => {
console.log('In myOtherPromise, caught err: ', e);
reject(e)
});
});
}
myOtherPromise().then(done => {
console.log('done calling myOtherPromise: ', done);
}).catch(e => {
console.log('caught err from myOtherPromise', err);
});
输出显示:
done
In myOtherPromise, caught err: resolved
我不明白为什么不打印以下内容:
'caught err from myOtherPromise'
我觉得有一些根本我不太了解的东西。为什么不将myOtherPromise
的拒绝传递给最终catch
块?
答案 0 :(得分:4)
您将错误捕获到e
变量中,但输出err
变量(未定义并导致运行时错误)。
.catch(e => {
console.log('caught err from myOtherPromise', err);
})
应该是:
.catch(e => {
console.log('caught err from myOtherPromise', e);
})