Async/await

2020-09-21  本文已影响0人  在下高姓

标签: Async/await


正文

Async/await 是以更舒适的方式使用 promise 的一种特殊语法

函数前面的 “async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。
async function f() {
  return 1;
}

f().then(alert); // 1

Await:
1.只在 async 函数内工作
2.不能在普通函数中使用 await
3.await 不能在顶层代码运行

async function f() {
  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });
  
  let result = await promise; // 等待,直到 promise resolve (*)
  alert(result); // "done!"
}

f();

promise 可能需要一点时间后才 reject。在这种情况下,在 await 抛出(throw)一个 error 之前会有一个延时。

async function f() {

  try {
    let response = await fetch('http://no-such-url');
  } catch(err) {
    alert(err); // TypeError: failed to fetch
  }
}

f();

如果我们没有 try..catch,那么由异步函数 f() 的调用生成的 promise 将变为 rejected。我们可以在函数调用后面添加 .catch 来处理这个 error:

async function f() {
  let response = await fetch('http://no-such-url');
}

// f() 变成了一个 rejected 的 promise
f().catch(alert); // TypeError: failed to fetch // (*)



有一个“普通”函数。如何在这个函数中调用 async 
async function wait() {
  await new Promise(resolve => setTimeout(resolve, 1000));

  return 10;
}

function f() {
  // 1 秒后显示 10
  wait().then(result => alert(result));
}

f();

上一篇下一篇

猜你喜欢

热点阅读