。然后需要一个功能,因为它的参数(onFullfilled, onRejected)
,这不是一个函数的任何值完全忽略
但是,prom
中的减少回调是一个承诺,所以只有第一个承诺将被等待
简单改变,标记下面编辑应该解决的事情
function timeout(delay) {
return new Promise((resolve, reject) => {
setTimeout(resolve, delay);
});
}
function printDots(delays) {
return delays.map((delay) => {
return timeout(delay).then(() => process.stdout.write('.'))
}).reduce((acc, prom) => acc.then(() => prom));
// ^^^^^^
}
printDots([513, 3402, 1337, 4122]).then(() => process.stdout.write('DONE!'));
但是请注意,该承诺都将在大约同一时间开始,无需等待0到前1点给出这一点,可以说是更好的解决方案开始等
结束对于printDots是使用Promise.all
function printDots(delays) {
return Promise.all(delays.map((delay) => timeout(delay).then(() => process.stdout.write('.'))));
}
按照意见,承诺需要按顺序运行 - 这是因为只有通过减少
一样简单
function timeout(delay) {
return new Promise((resolve, reject) => {
setTimeout(resolve, delay);
});
}
function printDots(delays) {
return delays.reduce((acc, delay) => acc.then(() => timeout(delay).then(() => process.stdout.write('.'))), Promise.resolve());
}
printDots([513, 3402, 1337, 4122]).then(() => process.stdout.write('DONE!'));
在这种情况下,你需要提供一个最初的承诺(Promise.resolve)减少,使第一次迭代正在与一个承诺像所有后续的有
这工作,和标记是一个很好的接触!谢谢。 –
那么,他们仍然发生在错误的顺序。请参见[this](https://repl.it/Eq9z/1) – 4castle
单行中的6个字符更改有时可能很难找到:p –