一段代码-关于async await
2021.05.08 Sat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let arrayTest = [1, 2, 3, 4, 5, 6];
async function test() {
await asyncForeach(arrayTest, (data) => {
console.log(data);
});
console.log('inner');
}
async function asyncForeach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index]);
}
}
test();
console.log('out');
  • js 中的回调函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const startPrint = (message, callback) => {
    message = message.split(' ');
    callback(message);
    };
    startPrint('hello motherfucker', (data) => {
    data = data.concat('hello world'.split(' '));
    console.log(data);
    });
    startPrint('hello motherfucker', (data) => {
    console.log(data);
    });

    即将一个函数作为另一个函数的参数传递,并且这个函数会对原函数的传入的其他参数作处理然后返回。

  • async 关键字
    在函数声明之前添加 async 关键字,会将函数变成异步函数,返回值是 promise

    1
    2
    3
    4
    5
    6
    7
    8
    const hello = async () => {
    return 'Hello';
    };
    console.log(hello);
    console.log(hello());
    hello().then((value) => {
    console.log(value);
    });

    运行结果

  • await 关键字
    await 只在异步函数里面才起作用,它可以放在任何基于 promise 的函数之前。它会在所在行上暂停代码执行,直到 promise 完成,然后返回结果值。

    1
    2
    3
    4
    5
    const hello = async () => {
    result = await Promise.resolve('hello');
    console.log(result);
    };
    hello();

    运行结果

  • await 在函数里不同位置的影响

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let arrayTest = [1, 2, 3, 4, 5, 6];
    async function test() {
    await asyncForeach(arrayTest, (data) => {
    console.log(data);
    });
    console.log('inner');
    }
    async function asyncForeach(array, callback) {
    for (let index = 0; index < array.length; index++) {
    await callback(array[index]);
    }
    }
    test();
    console.log('out');

    打印结果 1 out 2 3 4 5 6 inner

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let arrayTest = [1, 2, 3, 4, 5, 6];
    async function test() {
    asyncForeach(arrayTest, (data) => {
    console.log(data);
    });
    console.log('inner');
    }
    async function asyncForeach(array, callback) {
    for (let index = 0; index < array.length; index++) {
    await callback(array[index]);
    }
    }
    test();
    console.log('out');

    打印结果 1 inner out 2 3 4 5 6

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let arrayTest = [1, 2, 3, 4, 5, 6];
    async function test() {
    await asyncForeach(arrayTest, (data) => {
    console.log(data);
    });
    console.log('inner');
    }
    async function asyncForeach(array, callback) {
    for (let index = 0; index < array.length; index++) {
    callback(array[index]);
    }
    }
    test();
    console.log('out');

    打印结果 1 2 3 4 5 6 out inner

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let arrayTest = [1, 2, 3, 4, 5, 6];
    async function test() {
    asyncForeach(arrayTest, (data) => {
    console.log(data);
    });
    console.log('inner');
    }
    async function asyncForeach(array, callback) {
    for (let index = 0; index < array.length; index++) {
    callback(array[index]);
    }
    }
    test();
    console.log('out');`

    打印结果 1 2 3 4 5 6 inner out

检测到页面内容有更新,是否刷新页面