async
async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数
-
语法
async function name([param[, param[, ... param]]]) { statements }
-
参数
name:函数名称;
param:要传递给函数的参数;
statements:函数体语句; -
返回值
返回的Promise对象会运行执行(resolve)异步函数的返回结果,或者运行拒绝(reject)——如果异步函数抛出异常的话。 -
描述
一个async异步函数可以包含await指令,该指令会暂停异步函数的执行,并等待Promise执行,然后继续执行异步函数,并返回结果。记住,await 关键字只在异步函数内有效。如果你在异步函数外使用它,会抛出语法错误。
注意,当异步函数暂停时,它调用的函数会继续执行(收到异步函数返回的隐式Promise)
// 正常执行顺序 ---------------------------------
function fun(str) {
console.log(str);
}
fun(1)
console.log(2)
// 先打印 1 在打印 2
// 异步函数 -----------------------------------------------
async function asyncF(s) {
return s
}
asyncF(1).then(res => {
console.log(res);
})
console.log(2);
// 先打印 2 在打印 1
await
例子
// -----
// async/await 版本 循环(forEach)中调用异步
async function processArray(array) {
if(toString.call(array) != '[object Array]'){
console.log(array)
return
}
array.forEach(async (item) => {
await processArray(item);
})
console.log('Done!');
}
processArray(['a', 'b', 'c'])
// 结果:像同步一样的预期结果
// a
// b
// c
// Done!