欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

理解promise的三種姿勢(shì)

譯者按:對(duì)于Promise,也許你會(huì)用了,卻并不理解;也許你理解了,卻只可意會(huì)不可言傳。這篇博客將從3個(gè)簡(jiǎn)單的視角理解Promise,應(yīng)該對(duì)你有所幫助。

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出澤普免費(fèi)做網(wǎng)站回饋大家。

  • 原文: Three ways of understanding Promises
  • 譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯,并且對(duì)源代碼進(jìn)行了大量修改。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

示例1中,asyncFunc()函數(shù)返回的是一個(gè)Promise實(shí)例:

// 示例1
function asyncFunc()
{
    return new Promise(function(resolve, reject)
    {
        setTimeout(function()
        {
            resolve('Hello, Fundebug!');
        }, 100);
    });
}

asyncFunc()
    .then(function(x)
    {
        console.log(x); // 1秒之后打印"Hello, Fundebug!"
    });

1秒之后,Promise實(shí)例的狀態(tài)變?yōu)?strong>resolved,就會(huì)觸發(fā)then綁定的回調(diào)函數(shù),打印resolve值,即"Hello, Fundebug!"。

那么,什么是Promise呢?

  • Promise調(diào)用是阻塞的
  • Promise中保存了異步操作結(jié)果
  • Promise是一個(gè)事件

Promise調(diào)用是阻塞的

示例2可以幫助我們理解阻塞

// 示例2
function asyncFunc()
{
    return new Promise(function(resolve, reject)
    {
        setTimeout(function()
        {
            resolve('Hello, Fundebug!');
        }, 1000);
    });
}

async function main()
{
    const x = await asyncFunc(); // (A)
    console.log(x); // (B) 1秒之后打印"Hello, Fundebug!"
}

main();

以上代碼是采用Async/Await語(yǔ)法寫的,與示例1完全等價(jià)。await的中文翻譯即為"等待",這里可以"望文生義"。因此,相比于使用Promise實(shí)現(xiàn),它更加直觀地展示了什么是阻塞

  • (A)行: 等待asyncFunc()執(zhí)行,直到它返回結(jié)果,并賦值給變量x
  • (B)行: 打印x;

事實(shí)上,使用Promise實(shí)現(xiàn)時(shí),也需要等待asyncFunc()執(zhí)行,之后再調(diào)用then綁定的回調(diào)函數(shù)。因此,調(diào)用Promise時(shí),代碼也是阻塞的。

Promise中保存了異步操作結(jié)果

如果某個(gè)函數(shù)返回Promise實(shí)例,則這個(gè)Promise最初相當(dāng)于一個(gè)空白的容器,當(dāng)函數(shù)執(zhí)行結(jié)束時(shí),其結(jié)果將會(huì)放進(jìn)這個(gè)容器。示例3通過(guò)數(shù)組模擬了這個(gè)過(guò)程:

// 示例3
function asyncFunc()
{
    const blank = [];
    setTimeout(function()
    {
        blank.push('Hello, Fundebug!');
    }, 1000);
    return blank;
}

const blank = asyncFunc();

console.log(blank);  // 打印"[]"

setTimeout(function()
{
    const x = blank[0]; // (A)
    console.log(x); // 2秒之后打印"Hello, Fundebug!"
}, 2000);

開始時(shí),blank為空數(shù)組,1秒之后,"Hello, Fundebug!"被添加到數(shù)組中,為了確保成功,我們需要在2秒之后從blank數(shù)組中讀取結(jié)果。

對(duì)于Promise,我們不需要通過(guò)數(shù)組或者其他變量來(lái)傳遞結(jié)果,then所綁定的回調(diào)函數(shù)可以通過(guò)參數(shù)獲取函數(shù)執(zhí)行的結(jié)果。

Promise是一個(gè)事件

示例4模擬了事件:

// 示例4
function asyncFunc()
{
    const eventEmitter = {
        success: []
    };

    setTimeout(function()
    {
        for (const handler of eventEmitter.success)
        {
            handler('Hello, Fundebug!');
        }
    }, 1000);

    return eventEmitter;
}

asyncFunc()
    .success.push(function(x)
    {
        console.log(x); // 1秒之后打印"Hello, Fundebug!"
    });

調(diào)用asyncFunc()之后,sucesss數(shù)組其實(shí)是空的,將回調(diào)函數(shù)push進(jìn)數(shù)組,相當(dāng)于綁定了事件的回調(diào)函數(shù)。1秒之后,setTimeout定時(shí)結(jié)束,則相當(dāng)于事件觸發(fā)了,這時(shí)sucess數(shù)組中已經(jīng)注冊(cè)了回調(diào)函數(shù),于是打印"Hello, Fundebug!"。

當(dāng)Promise成功resolve時(shí),會(huì)觸發(fā)then所綁定的回調(diào)函數(shù),這其實(shí)就是事件。

參考

  • Promises for asynchronous programming
  • Async functions
  • ECMAScript 6 入門 - Promise對(duì)象

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了9億+錯(cuò)誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認(rèn)可。歡迎免費(fèi)試用!

理解promise的三種姿勢(shì)

版權(quán)聲明

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/09/25/3-ways-to-understand-promise/

當(dāng)前標(biāo)題:理解promise的三種姿勢(shì)
文章源于:http://aaarwkj.com/article34/jeehpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、用戶體驗(yàn)、Google、全網(wǎng)營(yíng)銷推廣云服務(wù)器網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
国产精品久久久毛片av| 蜜桃人妻av一区二区三区| 在线成人免费日韩视频| 99热这里只有精品免费播放| 中文在线在线天堂中文| av影片天堂在线观看| 亚洲精品一区二区三区高潮| 国产91九色在线播放| 欧美亚洲国产日韩在线高清| 亚洲一区二区精品偷拍| 人妻中字幕出轨中文字幕| 国产极品美女在线观看网站| 欧美亚洲成人免费电影| 亚洲国产日韩精品一区二| 国产精品三级av在线播放| 国产三级精品久久三级国专区| 在线播放国内自拍情侣酒店| 中文精品字幕人妻熟女小妇| 传媒视频在线免费观看| 亚洲精品在线一二三区| 欧美高清视频免费播放| 国产精品一区二区剧情熟女| 国产精品一区二在线观看| 欧美黄片在线免费观看视频| 欧美黑人在线一区二区| 亚洲国产欧美日韩在线一区| 国产免费成人在线视频| 日本丰满熟女毛茸茸的黑逼| 青草视频在线播放免费| 亚洲女人天堂av在线| 五月天丁香婷婷深爱| 18禁止看的视频免费| 亚洲日本av一区二区| 成人久久精品一区二区| 亚洲综合色视频免费在线播放| 久久精品一区二区三区乱码| 欧美三级美国三级亚洲三级| 国产男女乱淫一区二区三区| 国产传媒在线视频观看| 亚洲中文字幕乱码一二三| 欧美日韩精品人妻中文|