问题:Promise原生语法,then的链式调用实现的promise串行执行不太语义化(声明式),语法稍微有点繁杂;
javascript1
2
3
4
5
6
7
8
9
10
11
12new Promise((resolve, reject) => {
// Promise #1
resolve();
})
.then(result => {
// Promise #2
return result;
})
.then(result => {
// Promise #3
return result;
});解决方法:a. reduce;b. async/await;
javascript1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29// 1. reduce
const runPromiseByQueue = (promises) => {
promises.reduce(
(previousPromise, nextPromise) => previousPromise.then(() => nextPromise()),
Promise.resolve()
)
}
// 2. async/await
const runPromiseByQueue = async(promises) => {
for (let elem of promises) {
await elem();
}
}
// 使用
function createPromise(time, id) {
return () => new Promise(resolve =>
setTimeout(() => {
console.log('promise ', id);
resolve();
}, time)
)
}
runPromiseByQueue([
createPromise(300, 1),
createPromise(200, 2),
createPromise(100, 3),
])
JavaScript之串行Promise实现
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 果实的技术分享!
评论