【发布时间】:2018-04-02 17:39:34
【问题描述】:
我想对一个promise有一个promise,像这样:
let first = new Promise(resolveFirst => {
setTimeout(() => {
resolveFirst("resolved!");
}, 2000)
});
let second = new Promise(resolveSecond => {
setTimeout(() => {
resolveSecond(first);
}, 10)
});
second.then(secondValue => {
console.log("second value: ", secondValue);
secondValue.then(firstValue => {
console.log("first value: ", firstValue);
});
});
这样console.log("second value: ", secondValue); 将在10 毫秒之后打印,然后console.log("first value: ", firstValue) 将在2000 之后打印。
但是我得到了:
第二个值:已解决!
还有一个错误:
Uncaught (in promise) TypeError: secondValue.then is not a function
2010millies 之后在一起。
似乎当第二个promise被解决并返回第一个promise时,它会自动等待第一个promise也被解决。
这是为什么呢?我该如何打破它们之间的关系?
编辑
这是使用Array.reduce()在facebook上发布的解决方案:
const runPromisesInSeries =
ps => ps.reduce((p, next) =>
p.then(next), Promise.resolve());
const delay = d => new Promise(r => setTimeout(r, d));
runPromisesInSeries([() => delay(1000), () => delay(2000)]);
//executes each promise sequentially, taking a total of 3 seconds to complete
【问题讨论】:
-
你真的需要像这样返回
first承诺吗?问题是,当您调用second.then()时,您将解析所有的承诺链(您通过从second解析first创建该链)。
标签: javascript promise