async-await执行顺序题
# async-await执行顺序题
// 给出输出结果
// 第一题
const arr = ['a', 'b', 'c'];
function* generator() {
yield 1;
yield* arr;
yield 2;
}
for (let value of generator()) {
console.log(value)
}
// 第二题
function* generator() {
yield 'a';
return 'result';
yield 'b';
}
var it = generator();
console.log(it.next())
console.log(it.next())
// 第三题
const firstPromise = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(1), 5000)
})
}
const secondPromise = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(2), 3000)
})
}
async function* generator() {
const firstPromiseResult = await firstPromise();
yield firstPromiseResult;
const secondPromiseResult = await secondPromise();
yield secondPromiseResult;
}
var it = generator();
async function abc() {
for await (let value of it) {
console.log(value);
}
}
abc();
**// 第四题**
const myGenerator = (function* () {
yield 1;
yield 2;
yield 3;
})();
for (const value of myGenerator) {
console.log(value);
break;
}
for (const value of myGenerator) {
console.log(value);
}
// 第五题
function* generator(i) { yield i; yield i * 2;}
const gen = generator(10);
console.log(gen.next().value);
console.log(gen.next().value);
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
80
81
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
80
81
# 题一
const arr = ['a', 'b', 'c'];
function* generator() {
yield 1;
// yield* 表达式用来在一个 Generator 函数里面执行另一个 Generator 函数。
yield* arr;
yield 2;
}
for (let value of generator()) {
console.log(value) // 1 a b c 2
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 题二
function* generator() {
yield 'a';
return 'result';
yield 'b';
}
var it = generator();
console.log(it.next()) // {value: 'a', done: false}
console.log(it.next()) // {value: 'result', done: true}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 题三
const firstPromise = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(1), 5000)
})
}
const secondPromise = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(2), 3000)
})
}
async function* generator() {
const firstPromiseResult = await firstPromise();
yield firstPromiseResult;
const secondPromiseResult = await secondPromise();
yield secondPromiseResult;
}
var it = generator();
async function abc() {
for await (let value of it) {
console.log(value); // 1 注意这里打印的是value
// 2
}
}
abc();
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
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
# 题四
const myGenerator = (function* () {
yield 1;
yield 2;
yield 3;
})();
for (const value of myGenerator) {
console.log(value); // 1
break;
}
for (const value of myGenerator) {
console.log(value); // ❌❌ 这里不打印了,上面break了
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 题五
function* generator(i) {
yield i;
yield i * 2;
}
const gen = generator(10);
console.log(gen.next().value); // 10
console.log(gen.next().value); // 20
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11