ES6之async&await

文件结构

ES6之async&await_第1张图片

一般解决异步问题的方法:

1,promise

ES6之async&await_第2张图片

const fs = require('fs');

const readFile = function (fileName) {
  return new Promise((resolve, reject) => {
    fs.readFile(fileName, (err, data) => {
      if (err) reject (err);
      resolve(data);
    });
  });
}
readFile('data/a.txt').then((res) => {
  console.log(res.toString());
  return readFile('data/b.txt');
}).then((res) => {
  console.log(res.toString());
  return readFile('data/c.txt');
}).then((res) => {
  console.log(res.toString());
})

2,generator

ES6之async&await_第3张图片

const fs = require('fs');

const readFile = function (fileName) {
  return new Promise((resolve, reject) => {
    fs.readFile(fileName, (err, data) => {
      if (err) reject (err);
      resolve(data);
    });
  });
}

function * gen () {
  yield readFile('data/a.txt');
  yield readFile('data/b.txt');
  yield readFile('data/c.txt');
}

let g1 = gen();

g1.next().value.then((res) => {
  console.log(res.toString());
  return g1.next().value;
}).then((res) => {
  console.log(res.toString());
  return g1.next().value;
}).then((res) => {
  console.log(res.toString());
  return g1.next().value;
})

3,async

ES6之async&await_第4张图片

const fs = require('fs');

const readFile = function (fileName) {
  return new Promise((resolve, reject) => {
    fs.readFile(fileName, (err, data) => {
      if (err) reject (err);
      resolve(data);
    });
  });
}

async function fun () {
  let f1 = await readFile('data/a.txt');
  console.log(f1.toString());
  let f2 = await readFile('data/b.txt');
  console.log(f2.toString());
  let f3 = await readFile('data/c.txt');
  console.log(f3.toString());
}

fun();

----------------------------------------------------------------------------

在一个函数前面加上async之后,就表示这个函数里面有异步的任务

await后面加上一条语句,表示后面的结果需要等待

async的特点:

1,await只能放到async函数当中

2,相比generator,语义化更好

3,await后面可以是promise对象,也可以是数字,字符串,布尔

4,async函数返回一个promise对象

5,只要当await后面的promise对象的状态变成了reject的时候,接下来的语句就中断了,即整个async函数就会中断

一般在网络请求当中,一般都使用try catch来抛出错误

ES6之async&await_第5张图片

你可能感兴趣的:(ES6)