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

# 题一

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

# 题二

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

# 题三

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

# 题四

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

# 题五

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
上次更新: 2022/7/28 下午9:01:35