async/await与promise

async/await是基于Promise的,能将异步代码写得更像同步代码。async函数返回Promise,await用于等待Promise结果,不阻塞后续同步代码。相比Promise,async/await更方便处理异步步骤和异常,简化了链式调用。执行顺序上,Promise同步开始,异步执行回调;async函数立即执行,await时跳出函数体,等待Promise完成后再继续。
摘要由CSDN通过智能技术生成

async 是“异步”的简写,而 await 的意思是等待,async/await 是建立在 promise 的基础上, 像 promise 一样,也是非阻塞的。
根本作用:让异步代码看起来、表现起来更像同步代码。
asyn:
async 会将其后的函数的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。( Promise 的特点——无等待),所以在没有 await 的情况下执行 async 函数,它会立即执行,返回一个 Promise 对象,并且,绝不会阻塞后面的语句。
await:
await 等待的是一个表达式,这个表达式的计算结果是 Promise 对象或者其它值。 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值。
await 表达式的运算结果取决于它等的东西:

  1. 如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
  2. 如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。
    总结: async 会将其后的函数的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。
    相比于优势:
    1.Promise传递中间值⾮常麻烦,⽽async/await⼏乎是同步的写法
    2.async/await 的优势在于处理 then 链:假设一个业务,分多个步骤完成,每个步骤都是异步的,而且依赖于上一个步骤的结果。使用promise需要在then链中传输值,使用then链。
    3.async/await 可以使用try catch来捕捉异常,便于调试。
    使用async、await就很简单。
    async与await
    promise执行顺序:
    Promise本身是同步的立即执行函数,当在executor中执行resolve或者rejec
async/awaitpromise在异步编程中有不同的应用场景。 async/await是一种更直观、更易读的异步编程方式,它可以使异步代码在形式上更接近于同步代码。它通过使用async关键字定义一个异步函数,然后在函数内部使用await关键字来等待一个返回promise的表达式。这样可以避免回调地狱,使代码更加清晰易于维护。 promise是一种更底层的异步编程方式,它可以处理更复杂的异步操作。promise是一个对象,它代表了一个异步操作的最终完成或失败,并可以返回一个值。promise提供了then()catch()方法来处理异步操作的结果,可以链式调用多个then()方法来处理多个异步操作。 下面是async/awaitpromise的应用场景的示例: 1. 使用async/await处理异步请求: ```javascript async function makeRequest() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } } makeRequest(); ``` 2. 使用promise处理并行异步操作: ```javascript function getData(url) { return new Promise((resolve, reject) => { fetch(url) .then(response => response.json()) .then(data => resolve(data)) .catch(error => reject(error)); }); } Promise.all([ getData('https://api.example.com/data1'), getData('https://api.example.com/data2'), getData('https://api.example.com/data3') ]) .then(results => { console.log(results); }) .catch(error => { console.error(error); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值