国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

阿羅 / 1002人閱讀

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

原文地址

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

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

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

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

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

為什么使用then每次需要?jiǎng)?chuàng)建一個(gè)新的promise

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

看似矛盾的問題
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的時(shí)候,創(chuàng)建了新的promise,此時(shí)與promise1已經(jīng)沒有關(guān)系了,返回的時(shí)候改變的是新創(chuàng)建的promise的狀態(tài),變?yōu)閞ejected。

不過(guò)看了下Promises/A+的標(biāo)準(zhǔn),這邊敘述貌似還有些需要再研究確認(rèn)一下的地方。

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

【思考】

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

關(guān)于promise.then鏈?zhǔn)秸{(diào)用時(shí)參數(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,那么上一個(gè)then的執(zhí)行結(jié)果并不會(huì)傳遞到下一個(gè)then當(dāng)中。

【思考】

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96701.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    xiongzenghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<