async

anync关键字

  1. 普通函数定义前加async关键字普通函数变成异步函数
  2. 异步函数默认返回promise对象
  3. 在异步函数内部使用return关键字进行结果返回结果会被包裹的promise对象中return关键字代替 了resolve方法
  4. 在异步函数内部使用throw关键字抛出程序异常
  5. 调用异步函数再链式调用then方法获取异步函数执行结果
  6. 调用异步函数再链式调用catch方法获取异步函数执行的错误信息 async function 用来定义一个返回 AsyncFunction 对象的异步函数。异步函数是指通过事件循环异步执行的函数,它会通过一个隐式的 Promise 返回其结果。如果你在代码中使用了异步函数,就会发现它的语法和结构会更像是标准的同步函数。

await关键字

  1. await关键字只能出现在异步函数中
  2. await promise await后面只能写promise对象其他类型的API是不不可以的
  3. await关键字可是暂停异步函数向下执行直到promise返回结果

await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function

若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。

另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。

示例

node 依次读取文件内容

1
2
3
4
5
6
7
8
9
10
11
12
// es5
const fs = require('fs');

fs.readFile('./1.txt', 'utf8', (err, result1) => {
console.log(result1);
fs.readFile('./2.txt', 'utf8', (err, result1) => {
console.log(result1);
fs.readFile('./3.txt', 'utf8', (err, result1) => {
console.log(result1);
})
})
});
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
// es6 promise
const fs = require('fs');

function p1 () {
return new Promise((resolve, reject) => {
fs.readFile('./1.txt', 'utf8', (err, result) => {
resolve(result)
})
})
}
function p2 () {
return new Promise((resolve, reject) => {
fs.readFile('./2.txt', 'utf8', (err, result) => {
resolve(result)
})
})
}
function p3 () {
return new Promise((resolve, reject) => {
fs.readFile('./3.txt', 'utf8', (err, result) => {
resolve(result)
})
})
}

p1().then((r1) => {
console.log(r1);
return p2()
})
.then((r2) => {
console.log(r2);
return p3()
})
.then((r3) => {
console.log(r3);
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// es7 async await
const fs = require('fs');
// 改造现有异步函数api 让其返回promise对象 从而支持异步函数语法
const promisify = require('util').promisify;
// 调用promisify方法改造现有异步api 让其返回promise对象
const readFile = promisify(fs.readFile);

async function run () {
let r1 = await readFile('./1.txt', 'utf8')
let r2 = await readFile('./2.txt', 'utf8')
let r3 = await readFile('./3.txt', 'utf8')
console.log(r1);
console.log(r2);
console.log(r3);
}
run();

 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×