亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

promise學(xué)習(xí)(3)

阿羅 / 1052人閱讀

摘要:此時,由于只有一個的狀態(tài)能夠確定,所以執(zhí)行的是唯一那個確定狀態(tài)的函數(shù),而不會執(zhí)行其他的,但是并不會阻止其他的執(zhí)行。在實際應(yīng)用中,常用來設(shè)置超時操作,比如接口請求超時等。思考這個其實并不是矛盾,接受的是返回的的狀態(tài),與原來的沒有關(guān)系。

原文地址

Promise.race
// `delay`毫秒后執(zhí)行resolve
function timerPromisefy(delay) {
    return new Promise(function (resolve) {
        setTimeout(function () {
            resolve(delay);
        }, delay);
    });
}
// 任何一個promise變?yōu)閞esolve或reject 的話程序就停止運行
Promise.race([
    timerPromisefy(1),
    timerPromisefy(32),
    timerPromisefy(64),
    timerPromisefy(128)
]).then(function (value) {
    console.log(value);    // => 1
});

Promise.race 是當(dāng)接受的參數(shù)數(shù)組中有一個promise對象進入fulfilled或者rejected狀態(tài)的時候就停止運行。此時,由于只有一個promise的狀態(tài)能夠確定,所以then執(zhí)行的是唯一那個確定狀態(tài)的resolve函數(shù),而不會執(zhí)行其他的resolve,但是并不會阻止其他promise的執(zhí)行。

關(guān)于promise.race的使用

我們知道promise.race如果參數(shù)promise數(shù)組中只要有一個promise狀態(tài)改變就會執(zhí)行后續(xù)的回調(diào),那么如果參數(shù)數(shù)組中最先返回的是失敗狀態(tài),那就直接走到了rejected,其實這違背了我們使用的初衷。不過參數(shù)中promise狀態(tài)的改變是由開發(fā)者控制的,如果不想發(fā)生這樣的情況,可以在promise定義的時候設(shè)置好錯誤處理,保證promise.race需要解析的一定是確定的狀態(tài)。

在實際應(yīng)用中,promise.race常用來設(shè)置超時操作,比如接口請求超時等。而且要注意不要給promise.race傳入空數(shù)組,那么這個promise將不會被解析。

為什么使用then每次需要創(chuàng)建一個新的promise

如果沒有創(chuàng)建新的promise,每次都是返回之前的promise,那么當(dāng)最開始promise的狀態(tài)發(fā)生改變之后,后續(xù)的promise狀態(tài)其實已經(jīng)固定不會再改變了。這就無法實現(xiàn)promise的功能,所以每次的promise對象都應(yīng)該相互獨立,互相不影響。

看似矛盾的問題
let promise1 = Promise.resolve()
let promise2 = promise1.then(function foo(value) {
  return Promise.reject(3)
})

執(zhí)行結(jié)果:

看似矛盾,promise1明明執(zhí)行了成功的回調(diào),為什么最后promise2的狀態(tài)是rejected。原因是在調(diào)用then的時候,創(chuàng)建了新的promise,此時與promise1已經(jīng)沒有關(guān)系了,返回的時候改變的是新創(chuàng)建的promise的狀態(tài),變?yōu)閞ejected。

不過看了下Promises/A+的標準,這邊敘述貌似還有些需要再研究確認一下的地方。

標準中說,如果onFulfilled或者onRejected返回一個promise對象(thenable對象),那么promise2會接受x的狀態(tài)。上述代碼似乎執(zhí)行結(jié)果與標準中的敘述有矛盾,這個問題還需要再思考下。

【思考】

這個其實并不是矛盾,promise2接受的是返回的promise的狀態(tài),與原來的沒有關(guān)系。這邊確實很容易混淆。

關(guān)于promise.then鏈式調(diào)用時參數(shù)value的傳遞
promise1.then(function func(value){
    console.log("1-"+value)
    return value * 2
}).then(function func(value){
    console.log("2-"+value);
}).then(function func(value){
    console.log("3-"+value)
})

執(zhí)行結(jié)果

可以看到,如果不使用沒有return,那么上一個then的執(zhí)行結(jié)果并不會傳遞到下一個then當(dāng)中。

【思考】

有些問題如果覺得有疑惑或者弄不太清,那就一定要想著寫個demo運行看下,不能靠直覺或者思維定勢去想結(jié)果,畢竟~實踐是檢驗真理的唯一標準~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96701.html

相關(guān)文章

  • 嗨,了解一下,我的Promise學(xué)習(xí)筆記

    摘要:回調(diào)函數(shù)成功回調(diào)處理器失敗回調(diào)處理器用戶發(fā)送一個向百度服務(wù)器獲取數(shù)據(jù)的異步請求無阻塞高并發(fā)的的誕生更加嚴重的依賴異步操作才能完成無阻賽高并發(fā)的特性。 Promise Promise 是什么? 詞語本意: 發(fā)音:[?pr?m?s] 詞性:名詞, 翻譯:許諾,允諾。 MDN解釋 Promise 對象用于一個異步操作。 一個Promise表示一個現(xiàn)在,將來或永不可能可用的值。 按照書寫方...

    yanest 評論0 收藏0
  • promise學(xué)習(xí)(2)

    摘要:所謂的能對狀態(tài)進行操作的特權(quán)方法,指的就是能對對象的狀態(tài)進行等調(diào)用的方法,而通常的的話只能在通過構(gòu)造函數(shù)傳遞的方法之內(nèi)對對象的狀態(tài)進行操作。一般會在構(gòu)造函數(shù)中編寫邏輯,什么時候執(zhí)行回調(diào),什么時候執(zhí)行回調(diào)。 原文地址 1. 在then中使用reject 如果一個promise最初只定義了resolve,但是還想要使用reject怎么辦? 可以在then中返回一個新的promise。這個...

    firim 評論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十七)--Promise里的代碼為什么比setTimeout先執(zhí)行?

    摘要:版本以及之前,本身還沒有異步執(zhí)行代碼的能力,宿主環(huán)境傳遞給引擎,然后按順序執(zhí)行,由宿主發(fā)起任務(wù)。采納引擎術(shù)語,把宿主發(fā)起的任務(wù)稱為宏觀任務(wù),把引擎發(fā)起的任務(wù)稱為微觀任務(wù)?;居梅ㄊ纠幕卣{(diào)是一個異步的執(zhí)行過程。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的...

    pinecone 評論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十七)--Promise里的代碼為什么比setTimeout先執(zhí)行?

    摘要:版本以及之前,本身還沒有異步執(zhí)行代碼的能力,宿主環(huán)境傳遞給引擎,然后按順序執(zhí)行,由宿主發(fā)起任務(wù)。采納引擎術(shù)語,把宿主發(fā)起的任務(wù)稱為宏觀任務(wù),把引擎發(fā)起的任務(wù)稱為微觀任務(wù)?;居梅ㄊ纠幕卣{(diào)是一個異步的執(zhí)行過程。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的...

    zorpan 評論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十七)--Promise里的代碼為什么比setTimeout先執(zhí)行?

    摘要:版本以及之前,本身還沒有異步執(zhí)行代碼的能力,宿主環(huán)境傳遞給引擎,然后按順序執(zhí)行,由宿主發(fā)起任務(wù)。采納引擎術(shù)語,把宿主發(fā)起的任務(wù)稱為宏觀任務(wù),把引擎發(fā)起的任務(wù)稱為微觀任務(wù)。基本用法示例的回調(diào)是一個異步的執(zhí)行過程。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的...

    xiongzenghui 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<