async/await解决异步问题

async/await 是ECMAScript7提出来解决异步问题的方案,这个要比ES6的promise使用起来更清晰,更方便。

用法:

  1. 在JavaScript里的函数前面加上async关键字,则这个函数的返回结果就会变成一个Promise对象。
  2. await必须放在async函数里
  3. 在await后面接一个函数,来等待这个函数执行完成,如果这个函数返回的是Promise,则等待这个函数里异步结果执行完成(resolve())后再继续往下执行;如果返回的是非Promise,则函数里面的代码执行完就返回,不管有没有异步的结果。

举例:async/await配合promise使用

const fs = require("fs");
const read = function(fileName){
    return new Promise((resolve,reject)=>{
        fs.readFile(fileName,(err,data)=>{
            if (err) {
                reject(err);
            } else{
                resolve(data);
            }
        });
    });
};
async function readByAsync(){
    let a1 = await read('1.txt');
    let a2 = await read('2.txt');
    let a3 = await read('3.txt');
    console.log(a1.toString());
    console.log(a2.toString());
    console.log(a3.toString());
}
readByAsync();

注意: await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后面的程序不会继续执行,所以还需要通过try…catch处理一下。

const fs = require("fs");
const read = function(fileName){
    return new Promise((resolve,reject)=>{
        fs.readFile(fileName,(err,data)=>{
            if (err) {
                reject(err);
            } else{
                resolve(data);
            }
        });
    });
};
async function readByAsync(){
    let a1;
    let a2;
    let a3;
    try{
        a1 = await read('1.txt');
        a2 = await read('2.txt');
        a3 = await read('3.txt');
    }catch(e){
        //TODO handle the exception
    }
    console.log(a1);
    console.log(a2);
    console.log(a3);
}
readByAsync();
发布了398 篇原创文章 · 获赞 182 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/yexudengzhidao/article/details/105465862