js中的promise

Promise 是 JavaScript 語(yǔ)言提供的一種標(biāo)準(zhǔn)化的異步管理方式,它的總體思想是,需要進(jìn)行的IO,等待或者其他異步操作的函數(shù),不返回真是的結(jié)果,而返回一個(gè)“”承諾“”,函數(shù)的調(diào)用方可以在合適的時(shí)機(jī),選擇等待這個(gè)承諾兌現(xiàn),(通過(guò)Promise的then方法實(shí)現(xiàn))
Promise 的基本用法示例如下

function sleep (duration){
  return new Promise(function(resolve,reject){
       setTimeout(resolve,duration);
  })
}
sleep(1000).then(()=> console.log("finished"))

接下來(lái)我們?cè)囋嚫?setTimeout 混用的 Promise,在這段代碼中,我設(shè)置了兩段互不干擾的異步操作:通過(guò)setTimeout執(zhí)行console.log('d'),通過(guò)promise執(zhí)行console.log('c')

var r = new Promise(function(resolve,reject){
  console.log('a')
  resolve ()
})
setTimeout(()=>console.log('d',0)
r.then(()=>console.log('c'));
console.log('b')

這段代碼的執(zhí)行結(jié)果是a,b,c,d,其原因在于Promise產(chǎn)生的是javaScript引擎內(nèi)部的微任務(wù),而setTimeout是瀏覽器API,它產(chǎn)生宏觀任務(wù),微任務(wù)始終先于一個(gè)宏觀任務(wù)
為證實(shí)這一結(jié)果我們可以設(shè)計(jì)一個(gè)實(shí)驗(yàn),執(zhí)行一個(gè)耗時(shí)一秒的promise

    setTimeout(()=>console.log("d"), 0)
    var r = new Promise(function(resolve, reject){
        resolve()
    });
    r.then(() => { 
        var begin = Date.now();
        while(Date.now() - begin < 1000);
        console.log("c1") 
        new Promise(function(resolve, reject){
            resolve()
        }).then(() => console.log("c2"))
    });

執(zhí)行結(jié)果為c1,c2,d

在ES6語(yǔ)法當(dāng)中又新增加了async/await
async/await 是 ES2016 新加入的特性,它提供了for,if等代碼結(jié)構(gòu)來(lái)編寫異步的方式。它運(yùn)行的基礎(chǔ)是promise
它的用法

function sleep(duration) {
    return new Promise(function(resolve, reject) {
        setTimeout(resolve,duration);
    })
}
async function foo(){
    console.log("a")
    await sleep(2000)
    console.log("b")
}

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,839評(píng)論 1 56
  • 特點(diǎn) 1.對(duì)象的狀態(tài)不受外界影響。2.一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。3.無(wú)法取消Promi...
    施主畫個(gè)猿閱讀 168評(píng)論 0 0
  • 弄懂js異步 講異步之前,我們必須掌握一個(gè)基礎(chǔ)知識(shí)-event-loop。 我們知道JavaScript的一大特點(diǎn)...
    DCbryant閱讀 2,889評(píng)論 0 5
  • Promise是ES6中所獨(dú)有的對(duì)象,它很抽象,多用于異步j(luò)s代碼中,如:async函數(shù)與await一起使用,一個(gè)...
    都江堰古巨基閱讀 3,463評(píng)論 0 0
  • 世界上沒有工作不努力、人員不復(fù)雜的地方。 1。人們天生就有一個(gè)壞習(xí)慣,總是與別人比較,看誰(shuí)比自己好,誰(shuí)比自己差。事...
    天下百姓閱讀 527評(píng)論 0 0

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