前端异步流程工具
传统:
回调函数
流行:
1. Promise
const p1 = new Promise(function(resolve, reject) {
resolve('任务一')
}).then(function(data) {n
console.log(data)
})
const p2 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('任务二')
}, 1000)
}).then(function(data) {
console.log(data)
})
console.log('主线程任务')
Promise
.all([p1], [p2])
.then(function(data) {
console.log('任务三')
})
Promise
.race([p1], [p2])
.then(data => {
console.log('任务三')
})
promise 下面有两种方法:
(1)all: 当里面的方法全部执行之后才执行下一个,里面是传一个数组
all([p1,p2])
(2) race:谁快输出谁 里面传一个数组
race([p1,p2])
2. Generator函数
概念: 在function后面加个*定义为generator函数,通过yield来定义任务
```javascript
function* p1( ){
yield '任务一';
yield '任务二';
yield '任务三';
yield '任务四';
yield '任务五';
yield '任务六';
return '任务七';
}
var p = p1;
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
console.log(p.next())
```
<!-- 输出结果 -->
$ node generator.js
{ value: '任务1', done: false }
{ value: '任务2', done: false }
{ value: '任务3', done: false }
{ value: '任务4', done: false }
{ value: '任务5', done: false }
{ value: '任务6', done: true }
{ value: undefined, done: true }
3. Async函数
4. Node.js nextTick setImmidate
5. 第三方 async.js 库