介绍一下 async/await

async/await 定义

async/await 实际上是 Promise 的语法糖,它可以用一种更舒适的方式使用 Promise,更易于理解和使用。

async 关键字放在函数前面,表达这个函数总是返回一个 Promise,其他值将自动被包装在一个 resolved 的 Promise 中。

async function f(){
  return 1;
}

f().then((v)=>console.log(v));

console.log('f',f())

await 关键字可以暂停函数的执行,直到 Promise 的状态变成已敲定,然后 Promise 的结果继续执行。相比于 promise.then,它显得更为优雅。如果在非 async 中使用,会报语法错误。

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // 等待,直到 promise resolve (*)

  alert(result); // "done!"
}

f();

错误处理

如果一个 Promise 正常 resolve,await promise 的结果就是其返回值,否则,将抛出错误。我们可以使用 try/catch 来捕获错误。

async function f() {
  try {
    let response = await new Promise((resolve, reject) => {
        throw new Error('test err')
    });
  } catch(err) {
    console.log(err); // Error: test err
  }
}

f();

小练习
如何使用 async 实现 delay 函数, delay 函数定义如下:

delay((str) => str, 3000, 'Hello world').then(res => console.log(res))

答案:参考代码如下:

const sleep = (cb, time, args) => ({
	then: (cb) => {
		setTimeout(() => cb(args), time);
	}
});

const delay = async (cb, time, args) => {
	return await sleep(cb, time, args);
};

delay((str) => str, 3000, "Hello world").then((res) => console.log(res)); // Hello world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值