-
Notifications
You must be signed in to change notification settings - Fork 2
/
co.js
79 lines (61 loc) · 1.56 KB
/
co.js
1
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
const co = require('co');
/**
* co -- 用于 Generator 函数的自动执行。
* 内部封装操作generator,处理并发的异步操作 - http://es6.ruanyifeng.com/#docs/generator-async
* 先检查参数gen是否为 Generator 函数。如果是,就执行该函数,得到一个内部指针对象;如果不是就返回,并将 Promise 对象的状态改为resolved。
*
* co官方文档:
* https://www.npmjs.com/package/co
*
* Genarator函数:
* 1. function关键字与函数名之间有一个星号;
* 2. 函数体内部使用yield表达式
* 执行: next()
*
*
* 使用:
* http://es6.ruanyifeng.com/#docs/generator
**/
const p = co(function* () {
var res = yield [1, 2, 3]
var res1 = yield [4, 5, 6]
console.log(res)
})
console.log(">>> p", p)
/*
co(function* () {
var res = yield [
Promise.resolve(1),
Promise.resolve(2)
];
var res1 = yield [
Promise.resolve(1),
Promise.resolve(2)
];
console.log(res);
console.log(res1);
}).catch(e=>{
console.log(e)
});
// 对象的写法
co(function* () {
var res = yield {
1: Promise.resolve(1),
2: Promise.resolve(2),
};
console.log(res);
}).catch(e=>{
console.log(e)
});
co(function* () {
var values = [1, 2, 3];
a = yield values.map(somethingAsync);
console.log(a)
console.log(111)
});
function* somethingAsync(x) {
// do something async
return x
}
// 上面的代码允许并发三个somethingAsync异步操作,等到它们全部完成,才会进行下一步。
*/