。然後需要一個功能,因爲它的參數(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 –