ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

async,awaite与promise的区别

2021-12-02 09:02:59  阅读:162  来源: 互联网

标签:const awaite await getJSON return promise async


什么是Async/Await?

async/await是写异步代码的新方式,以前的方法有回调函数和Promise。
async/await是基于Promise实现的,它不能用于普通的回调函数。
async/await使得异步代码看起来像同步代码。

//使用promise
 const makeRequest = () =>
        getJSON().then(data => {
            console.log(data)
            return "done"
        })
//使用async,await
 const makeRequest = async () => {
        // await getJSON()表示console.log会等到getJSON的promise成功reosolve之后再执行。
        console.log(await getJSON)
        return "done"
    }

区别:

函数前面多了一个aync关键字。await关键字只能用在aync定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。

Async/Await相比于promise的优势:

1)使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。

2) 错误处理:Async/Await 让 try/catch 可以同时处理同步和异步错误。如果它在Promise中。我们需要使用 .catch。

   const makeRequest = async () => {
        try {
            // this parse may fail
            const data = JSON.parse(await getJSON())
            console.log(data)
        } catch (err) {
            console.log(err)
        }
    }

你很可能遇到过这样的场景,调用promise1,使用promise1返回的结果去调用promise2,然后使用promise2结果去调用promise3。

//promise.then方式
const makeRequest = () => {
        return promise1().then(value1 => {
            return promise2(value1).then(value2 => {
                return promise3( value2)
            })
        })
}
//async,await方式
const makeRequest = async () => {
        const value1 = await promise1()
        const value2 = await promise2(value1)
        return promise3(value2)
}

promise.then.then链式写法太麻烦,代码可读性也差,如果用async,await方式就不一样,代码看起来像同步的一样,可能你还会想到用promise.all([])方法,这样确实简单,但如果题目改成使用promise1,promise2结果去调用promise3,promise.all([])方法就为了可读性牺牲了语义,所以最好还是使用async,await方式。

标签:const,awaite,await,getJSON,return,promise,async
来源: https://blog.csdn.net/qq_44626593/article/details/121658768

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有