async/await 异步函数

1、async异步函数的使用
// await/async写法
async function foo1() {}

const foo2 = async () => {};
2、async异步函数的执行流程

在这里插入图片描述

// 都是同步代码,跟普通函数代码没区别
async function foo() {
  console.log("内部代码执行1");
  console.log("内部代码执行2");
  console.log("内部代码执行3");
}

console.log("script start");
foo();
console.log("script end");
3、async异步函数和普通函数的区别1 - 返回值
// 异步函数的返回值一定是个Promise
async function foo() {
  console.log("foo start...");
  // 1、如果默认不写,默认返回的是undefined

  // 2、返回一个值
  // return "aaa";

  // 3、返回一个thenable
  // return {
  //   then: function (resolve, reject) {
  //     resolve("haaaaaa");
  //   },
  // };

  // 4、返回一个Promise
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve("hehehehhehe");
    }, 2000);
  });
}

const promise = foo();
// 这个then是在foo()有return的时候才会被执行,而且是被加到微任务队列里面的
promise.then((res) => {
  console.log(res);
});
4、async异步函数和普通函数的区别2 - 异常
async function foo() {
  console.log("foo function start~");
  console.log("中间代码");

  // 异步函数中的异常,会被作为异步函数返回的Promise的reject值的,可以在catch中拿到错误信息
  throw new Error("error Message~");

  console.log("foo function end");
}

foo().catch((err) => {
  console.log('chen', err);
});
console.log("后续还有代码~");
5、async中使用await
// async function foo() {
//   await 表达式(Promise)
// }

// 1、await跟上表达式
// function requestData() {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       resolve(111);
//     }, 1000);
//   });
// }
// async function foo() {
//   // 什么时候返回res -> 就是requestData()调用resolve的时候
//   const res = await requestData();

//   // 这些后面的代码,相当于await requestData();中Promise then中执行的。
//   console.log('res', res);
//   console.log("=============");
// }
// foo();


function requestData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(111);
    }, 1000);
  });
}
// 2、跟上其他的值
async function foo() {
  // 2.1、await 跟上普通值,它会立即返回
  // const res1 = await 123;

  // 2.2、await跟上对象
  // const res1 = await {
  //   then: function (resolve, reject) {
  //     resolve("aaaaaaa");
  //   },
  // };

  // 2.3、await跟上Promise
  // const res1 = await new Promise((resolve) => {
  //   resolve("bbbb");
  // });
 

  // 2.4、reject值,当我们这里面reject的时候,reject的值,会作为整个异步函数foo()的Promise的reject的值,我们需要在外面catch
  const res1 = await requestData();
   console.log("res", res1);
}
foo().catch((err) => {
  console.log('err---', err);
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,异步调用一直是一个重要的话题。许多开发者已经习惯使用Promise、回调函数等方式来处理异步代码。但是,使用async/await语法可以让异步代码更加简洁易读。 async/await是ES2017(ES8)的标准,它们允许我们以同步的方式编写异步代码。async/await基于Promises,它们提供了一种更容易理解和使用的方式来解决异步交互。 1. async 函数 要使用 async/await 异步调用,必须先创建一个async 函数, 像这样: ```javascript async function myAsyncFunction() { // code goes here } ``` async 函数是在定义时就立即执行的。这可以让我们确保异步代码在异步执行之前被定义。 2. await 关键字 在async函数中,调用异步操作时需要await关键字。它可以使函数停止执行,等待异步操作完成,然后返回异步操作的结果。 例如,可以等待一个Promise对象完整处理后返回结果,像这样: ```javascript async function myFunction() { const result = await myAsyncOperation(); console.log(result); } ``` 在这个例子里,myAsyncOperation()可能需要很长时间才能完成。await确保在异步操作返回之前,不会执行代码的后续部分。当操作完成时,async函数才会继续执行。 3. 错误处理 回调函数中的错误处理有时非常麻烦。但是,使用async /await,可以使用try...catch块十分方便地处理错误。 例如,如果await的异步函数失败,可以使用try/catch语句捕获该错误。 ```javascript async function myFunction() { try { const result = await myAsyncOperation(); console.log(result); } catch (error) { console.error('There was a problem with the async operation:', error); } } ``` 在这个例子里,如果myAsyncOperation 函数中有一个错误,将控制台记录相应错误信息。 总而言之,async/await 语法是一种很好的方式来处理异步操作。不仅它可以使异步代码更加简洁易读,同时也提供了错误处理和其他便利功能,通过这种方式,我们可以更加有效地管理我们的异步代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值