【发布时间】:2018-05-25 10:26:13
【问题描述】:
为什么 resolveing 承诺正确地等待 someOtherPromise 完成,而 reject 却没有?运行以下代码示例并检查 console.log 输出。我预计“myFailingPromise denied”消息会在 2000 毫秒后显示,就像“myPromise resolved”一样。
let someOtherPromise = (previousPromise) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(previousPromise + ' => someOtherPromise after 2000ms');
resolve('someOtherPromise');
}, 2000);
});
}
let myPromise = () => {
return new Promise((resolve, reject) => {
resolve(someOtherPromise('myPromise'));
});
};
let myFailingPromise = () => {
return new Promise((resolve, reject) => {
reject(someOtherPromise('myFailingPromise'));
});
};
myPromise().then((val) => {
// this is executed after `someOtherPromise` resolves.
console.log('myPromise resolved');
}).catch((err) => {
console.log('myPromise rejected');
});
myFailingPromise().then((val) => {
// this is executed after `someOtherPromise` resolves.
console.log('myFailingPromise resolved');
}).catch((err) => {
console.log('myFailingPromise rejected');
});
我知道可以通过在第二个示例中使用 someOtherPromise.then(reject) 来实现预期的行为,但我的问题是为什么不能将承诺作为 reject 的参数,因为它适用于 resolve。
【问题讨论】:
-
这就是resolve and reject 的工作原理。
resolveis notfulfill(很遗憾)。 -
您在 myPromise 中的新 Promise 会立即使用
someOtherPromise解析。所以myPromise().then()实际上只是someOtherPromise的成功处理程序。您想在这里实现什么目标? -
我用适当的样本更新了问题
标签: javascript promise es6-promise