Toc
  1. async function
  2. await
Toc
0 results found
Ihuzb
JavaScript-async/await

async function

  • async function用来定义一个异步函数。如果在代码中使用了异步函数,就会发现它的语法和结构会更像是标准的同步函数。
  • 一个async异步函数可以包含await指令,该指令会暂停异步函数的执行,并等待Promise执行,然后继续执行异步函数,并返回结果。
  • await关键字只在异步函数内有效。如果你在异步函数外使用它,会抛出语法错误。
let a = Promise.resolve(1);
let b = Promise.resolve(2);
let run = async () => {
let info = await Promise.all([a, b]);
//[ 1, 2 ]
console.log(info)
}
run();
  • 使用async函数重写promise
//promise链式写法
function getProcessedData(url) {
return downloadData(url) // 返回一个 promise 对象
.catch(e => {
return downloadFallbackData(url) // 返回一个 promise 对象
})
.then(v => {
return processDataInWorker(v); // 返回一个 promise 对象
});
}

// async 重写后
async function getProcessedData(url) {
let v;
try {
v = await downloadData(url);
} catch (e) {
v = await downloadFallbackData(url);
}
return processDataInWorker(v);
}
  • 最后的return语句中没有await操作符,因为async function的返回值将被隐式地传递给Promise.resolve

await

  • await操作符用于等待一个Promise对象。它只能在异步函数async function中使用。
  • await表达式会暂停当前async function的执行,等待Promise处理完成。
  • Promise正常处理fulfilled,其回调的resolve函数参数作为await表达式的值,继续执行async function
  • Promise处理异常rejectedawait表达式会把Promise的异常原因抛出。
  • 另外,如果await操作符后的表达式的值不是一个Promise,则返回该值本身。
let a = Promise.resolve(1);
let b = Promise.reject(2);

let run = async () => {
//处理正常
let infoA = await a;
// 1
console.log(infoA);

//处理异常
try {
let infoB = await b;
} catch (e) {
// 2
console.log(e)
}

}
run();
本文作者:Ihuzb
版权声明:本文首发于Ihuzb的博客,转载请注明出处!