ES6添加Promise大大的方便了异步的调用,ES7提出async,await来完善异步。
async
async function name (argument) {
statements
}
1
2
3
2
3
特点
返回值
- 当async函数在被声明的时候他会返回一个Promise
- 当async函数返回一个值时,这个值会当成Promise的resolve()的参数
- 当async函数抛出一个值时候,这个值会当成promise的reject()的参数
// success
async function testAsync() {
return 'success'
}
const t = testAsync()
t.then((a) => {
console.log(a)
})
// fail
async function testAsync() {
throw 'fail'
}
const t = testAsync()
t.then((a) => {
console.log(a)
}, (a) => {
console.log(a)
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
await
async函数中有个特殊字符await,await后面若是一个异步函数,则在异步函数完成之后继续执行
function testSome(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x)
}, 1000)
})
}
async function test() {
let a = await testSome(1)
console.log(a)
}
test()
// 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
解析
异步函数可以包含一个wait表达式,该表达式暂停异步函数的执行并等待传递的Promise的解析,然后恢复异步函数的执行并返回解析后的值。