-
Notifications
You must be signed in to change notification settings - Fork 454
/
generator.js
64 lines (54 loc) · 1.38 KB
/
generator.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
const fs = require('fs');
const bluebird = require('bluebird');
const readFile = bluebird.promisify(fs.readFile);
/**
* 读取A--->读取B--->读取C
*/
function* read() {
let info = yield readFile('./JS/Async/data/info.txt', 'utf-8');
let base = yield readFile(info, 'utf-8');
let age = yield readFile(base, 'utf-8');
return age;
}
let it = read();
let { value, done } = it.next();
value.then((data) => {
let { value, done } = it.next(data); //data赋值给了 info
value.then((data) => {
let { value, done } = it.next(data); //data赋值给了 base
value.then((data) => {
let { value, done } = it.next(data); //data赋值给base
console.log(value); //输出22
});
});
});
// 引入co
const co = require('co');
co(read()).then(data => {
console.log(data); //输出22
}).catch(err => {
console.log(err);
});
/**
* 自己实现一个 co
* 接受一个迭代器
*
*/
function my_co (it) {
return new Promise((resolve, reject) => {
function next(data) {
let {value, done} = it.next(data);
if(!done) {
value.then(val => {
next(val);
}, reject);
}else{
resolve(value);
}
}
next();
});
}
my_co(read()).then(data => {
console.log(data); //输出22
});