var a = async function(){
throw new Error('async function error')
}
var a1 = b()
console.log(a1)
// VM832:5 Promise {<rejected>: Error: async function error
// at b (<anonymous>:2:11)
// at <anonymous>:4:10}
var a = async function(){
return 'a'
}
var a1 = a()
console.log(a1)
VM909:5 Promise {<fulfilled>: 'a'}
var a = async function(){}
var a1 = a()
console.log(a1)
VM991:3 Promise {<fulfilled>: undefined}
async 函数
async 函数是使用 async 关键字声明的函数
async 函数是 AsyncFunction构造函数的实例,并且其中允许使用 await关键字。
async 和 await 关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需可以地链式调用Promise
返回值:一个Promise,这个promise要么会通过一个由async函数返回的值被解决,要么会通过一个从async函数中抛出的异常被拒绝(如果async函数的返回值不是promise,那么它将被隐式地包装在一个promise中)
async 函数可能包含0个或多个await表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当期等待的基于promise的异步操作被兑现会被拒绝之后才会恢复进程。promise的解决值会被当做await表达式的返回值。使用async await关键字,可以在异步代码中使用普通的try/catch代码快
await关键字只在async函数内有效,在async函数体之外使用,会抛出语法错误:SyntaxError
async/await的目的是为了简化基于promise的API时所需的语法。async/await的行为就好像使用了生成器和promise
如果你希望并行执行更多任务,请使用 await Promise.all([job1(), job2()])