异步

关于继发异步

1.两种方案Promise和async/await

2.Promise方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let queue = [p1,p2,p3,p4,p5]//5个Promise

let seq = Promise.resolve();
queue.forEach(ele=>{
seq = seq.then(res=>{
console.log(res)
return res;
})
});
可以看到输出了4个promise的结果,第五个promise的成功回调调用
seq.then(res=>console.log(res))就可以看到

同样也可使用数组的reduce方式实现
let queue = [p1,p2,p3,p4,p5]//5个Promise

queue.reduce((prev,next)=>{//如果有第二个参数,prev的值就为这个参数
return prev = prev.then(res=>{
console.log(res);
return next
})
},Promise.resolve())

3.async/await方案
着一种方案用的比较多一点,这是最新ES7的用法,大大简化了异步处理流程

1
2
3
4
5
;(async ()=>{
let queue = [p1,p2,p3,p4,p5];//promise 数组
for(let a of queue)
await a
})();