我有诺言-父母,孩子和孙子。如果我正确理解了诺言不会冒泡将错误从Granchild传递给父项,那么当我在孙子项中抛出错误时,我需要将其捕获在子项中,然后再次将其抛出并最终陷入父项中。例如
const grandchildPromise = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
throw 'some error msg';
}, 100)
});
};
const childPromise = () => {
return new Promise(async(resolve, reject) => {
try {
await grandchildPromise();
} catch(e) {
console.log('caught in childPromise');
reject(e);
}
});
};
const parentPromise = () => {
return new Promise(async(resolve, reject) => {
try {
await childPromise();
} catch(e) {
console.log('caught in parentPromise');
reject(e);
}
});
}
parentPromise()
.then(() => {
console.log('fullfilled')
})
.catch(e => console.log(e));
,但是它从不控制台“在childPromise中捕获”。那是一回事。
另一种情况是,我可能不应该将async
作为执行者传递给new Promise
,但我真的不知道如何重构该代码以不更改await
就不这样做语法。
所以我有两个问题:
Demo以上代码。