promise async 和 await

在vue中發(fā)現(xiàn)一個(gè)問(wèn)題,如果在mounted中同時(shí)要調(diào)用兩個(gè)接口,分別是接口a和接口b,但是接口b需要用到接口a的數(shù)據(jù),假設(shè)這個(gè)數(shù)據(jù)為id。如果按平常方式寫(xiě)就會(huì)出現(xiàn)向接口b發(fā)送請(qǐng)求的時(shí)候,id為空。這就是因?yàn)閮蓚€(gè)接口都是異步請(qǐng)求,我們需要把他們編程同步的。

Promise

Promise 對(duì)象用于表示一個(gè)異步操作的最終完成 (或失敗)及其結(jié)果值。
這樣使得異步方法可以像同步方法那樣返回值:異步方法并不會(huì)立即返回最終的值,而是會(huì)返回一個(gè) promise,以便在未來(lái)某個(gè)時(shí)候把值交給使用者。

一個(gè) Promise 必然處于以下幾種狀態(tài)之一:

  • 待定(pending): 初始狀態(tài),既沒(méi)有被兌現(xiàn),也沒(méi)有被拒絕。
  • 已兌現(xiàn)(fulfilled): 意味著操作成功完成。
  • 已拒絕(rejected): 意味著操作失敗。

async和await

asyncawait關(guān)鍵字讓我們可以用一種更簡(jiǎn)潔的方式寫(xiě)出基于Promise的異步行為。

??async函數(shù)可能包含0個(gè)或者多個(gè)await表達(dá)式。await表達(dá)式會(huì)暫停整個(gè)async函數(shù)的執(zhí)行進(jìn)程并出讓其控制權(quán),只有當(dāng)其等待的基于promise的異步操作被兌現(xiàn)或被拒絕之后才會(huì)恢復(fù)進(jìn)程。promise的解決值會(huì)被當(dāng)作該await表達(dá)式的返回值。使用async / await關(guān)鍵字就可以在異步代碼中使用普通的try / catch代碼塊。

function settime1(){
    console.log("我在return外面")
    return new Promise(resolve=>{
        setTimeout(function(){
            console.log("正在進(jìn)行中...")
            resolve('resolved');
        },5000)
    })
   
}
function add(){
    let a = 1
    let b = 1
    // console.log(a+b)
    return a+b
}
async function result(){
   const r1 = await settime1() // await通過(guò)promise暫停了線程,等待運(yùn)行完畢
   console.log(r1)
   const r2 = add()
   console.log(r2)
   
}

result()

總結(jié)

在我們平常寫(xiě)接口的時(shí)候,最好還是用async/await 配合promise進(jìn)行封裝,不然就會(huì)導(dǎo)致一開(kāi)始提出的問(wèn)題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個(gè)人理解:因?yàn)閖avascript是單線程的,所以他的異步相當(dāng)于將一些任務(wù)丟到運(yùn)行隊(duì)列的尾部,就像是Android...
    ironman_閱讀 3,096評(píng)論 0 1
  • 關(guān)于異步 JavaScript腳本執(zhí)行是“單線程”(腳本解釋引擎是單線程的),但會(huì)GUI線程,網(wǎng)絡(luò)請(qǐng)求線程等JS引...
    江ls閱讀 713評(píng)論 0 0
  • 前言 Promise async generator是ES6之后才被提出來(lái)的,他們都能夠用來(lái)解決以前JS異步調(diào)用產(chǎn)...
    _玖柒_閱讀 675評(píng)論 0 4
  • 回調(diào)地獄 回調(diào)地獄嵌套多個(gè)方法調(diào)用會(huì)創(chuàng)建錯(cuò)綜復(fù)雜的代碼,會(huì)難以理解與調(diào)試。當(dāng)想要實(shí)現(xiàn)更復(fù)雜的功能時(shí),回調(diào)函數(shù)也會(huì)存...
    Inlight先森閱讀 2,894評(píng)論 0 4
  • 推薦指數(shù): 6.0 書(shū)籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語(yǔ)言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,952評(píng)論 0 5

友情鏈接更多精彩內(nèi)容