其他分享
首页 > 其他分享> > koa2 async和await 实战详解

koa2 async和await 实战详解

作者:互联网

基本用法


第一个例子: await只能用在async函数


let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            resolve(); // 从 pending 变为 resolved
        }, time);
    })
};

let funAsync = async function () {
    let numArr = [1003, 1002, 1001];
    // 会报错 await没有在async函数中
    numArr.forEach(function(value, index){
        await funPromise(value);
    })
}

funAsync();
let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            // 从 pending 变为 resolved
            resolve(time + ' : ' + new Date()); 
        }, time);
    })
};

let funAsync = async function () {
    let numArr = [1003, 1002, 1001];
    numArr.forEach(async function(value, index){
        //三个funPromise()操作将是并发执行,也就是同时执行,而不是继发执行
        let result = await funPromise(value);
        console.log(result);
    })
}

funAsync();
  第一个例子错误示例2的运行结果
let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            // 从 pending 变为 resolved
            resolve(time + ' : ' + new Date());  
        }, time);
    })
};

let funAsync = async function () {
    let numArr = [1003, 1002, 1001];
    // 三个funPromise()操作将是继发执行
    for (let value of number){
        let result = await funPromise(value);
        console.log(result);
    }
}

funAsync();
  第一个例子正确示例子的运行结果

第二个例子:await等待promise返回结果


let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            resolve(); // 从 pending 变为 resolved
        }, time);
    })
};

let funAsync = async function () {
    // 在这里使用起来就像同步代码那样直观
    console.log('start:  ' + new Date());
    await funPromise(3000);
    console.log('end:  '  + new Date());
};

funAsync();
  第二个例子的运行结果

第三个例子:等待async函数中的promise返回结果


let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            resolve(); // 从 pending 变为 resolved
        }, time);
    })
};

let funAsync_1 = async function () {
    console.log('funAsync_1_start:  ' + new Date());
    await funPromise(3000);
    console.log('funAsync_1_end:  '  + new Date());
};

let funAsync_2 = async function () {
    console.log('funAsync_1_start:  ' + new Date());
    // 等待 funAsync_1() 中的 Promise 运行结束
    await funAsync_1();
    console.log('funAsync_1_end:  '  + new Date());
};

funAsync_2();
  第三个例子的运行结果

注意点


let funPromise = function (time) {
    return new Promise(function (resolve, reject) {
        //Pending 进行中
        setTimeout(function () {
            reject('我是返回的错误'); // 从 pending 变为 rejected
        }, time);
    })
};

let funAsync = async function () {
    console.log('start:  ' + new Date());
    try {
        await funPromise(3000);
        console.log('我不会执行的噢');
    }  catch (err) {
        console.log(err);
    }
    console.log('end:  '  + new Date());
};

funAsync();
  注意点的程序运行结果

源码查看


https://github.com/yangxiaopingios/koaExample/blob/master/code/script/oneExample.js



作者:码农随想录
链接:https://www.jianshu.com/p/f8cfb82b4dad
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:function,await,new,funAsync,let,koa2,async
来源: https://www.cnblogs.com/sexintercourse/p/14419297.html