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

資訊專欄INFORMATION COLUMN

關(guān)于promise的學(xué)習(xí)和拓展

mayaohua / 2948人閱讀

摘要:秒鐘后調(diào)用函數(shù)觀察上述代碼執(zhí)行,在的控制臺輸出可以看到就是典型的異步操作統(tǒng)一執(zhí)行邏輯,不關(guān)心如何處理結(jié)果,然后,根據(jù)結(jié)果是成功還是失敗,在將來的某個時候調(diào)用函數(shù)或函數(shù)。

Promise的學(xué)習(xí)和拓展

以前開發(fā)的時候偶爾會在請求中,或者其他場景中用到promise,只知道它是什么(鏈?zhǔn)秸{(diào)用,用于請求的后返回值得操作之類的),大概怎么用,卻沒有深入了解。

起因:(在參考了廖雪峰的promise講解后https://www.liaoxuefeng.com/w...)

在javascript中,所有的代碼都是單線程進(jìn)行的。
由于這個“缺陷”,導(dǎo)致JavaScript的所有網(wǎng)絡(luò)操作,瀏覽器事件,都必須是異步執(zhí)行。異步執(zhí)行可以用回調(diào)函數(shù)實現(xiàn)(否者在加載完js文件后。其他操作也不會發(fā)生了):

參數(shù):executor是帶有 resolve 和 reject 兩個參數(shù)的函數(shù) 。Promise構(gòu)造函數(shù)執(zhí)行時立即調(diào)用executor 函數(shù), resolve 和 reject 兩個函數(shù)作為參數(shù)傳遞給executor(executor 函數(shù)在Promise構(gòu)造函數(shù)返回所建promise實例對象前被調(diào)用)。resolve 和 reject 函數(shù)被調(diào)用時,分別將promise的狀態(tài)改為fulfilled(完成)或rejected(失敗)。executor 內(nèi)部通常會執(zhí)行一些異步操作,一旦異步操作執(zhí)行完畢(可能成功/失敗),要么調(diào)用resolve函數(shù)來將promise狀態(tài)改成fulfilled,要么調(diào)用reject 函數(shù)將promise的狀態(tài)改為rejected。如果在executor函數(shù)中拋出一個錯誤,那么該promise 狀態(tài)為rejected。

由此可以知道,一個promise包含3個狀態(tài):(注意,不包含resolve
)
pending: 初始狀態(tài),既不是成功,也不是失敗狀態(tài)。
fulfilled: 意味著操作成功完成。
rejected: 意味著操作失敗。
function callback() {
    console.log("Done");
}
console.log("before setTimeout()");
setTimeout(callback, 0); // 1秒鐘后調(diào)用callback函數(shù)
console.log("after setTimeout()");

觀察上述代碼執(zhí)行,在Chrome的控制臺輸出可以看到:

before setTimeout()
after setTimeout()
Done
AJAX就是典型的異步操作
var ajax = ajaxGet("http://...");
ajax.ifSuccess(success)
    .ifFail(fail);
統(tǒng)一執(zhí)行AJAX邏輯,不關(guān)心如何處理結(jié)果,然后,根據(jù)結(jié)果是成功還是失敗,在將來的某個時候調(diào)用success函數(shù)或fail函數(shù)。
這個時候promise方法就應(yīng)運而生了。
一個簡單的promise應(yīng)用
生成一個0-2之間的隨機數(shù),如果小于1,則等待一段時間后返回成功,否則返回失敗:
function test(resolve, reject) {
    var timeOut = Math.random() * 2;
    log("set timeout to: " + timeOut + " seconds.");
    setTimeout(function () {
        if (timeOut < 1) {
            log("call resolve()...");
            resolve("200 OK");
        }
        else {
            log("call reject()...");
            reject("timeout in " + timeOut + " seconds.");
        }
    }, timeOut * 1000);
}

有了執(zhí)行函數(shù),我們就可以用一個Promise對象來執(zhí)行它,并在將來某個時刻獲得成功或失敗的結(jié)果:

var p1 = new Promise(test);
var p2 = p1.then(function (result) {
    console.log("成功:" + result);
});
var p3 = p2.catch(function (reason) {
    console.log("失敗:" + reason);
});

也可以寫成鏈?zhǔn)秸{(diào)用的形式

new Promise(test).then(function (result) {
    console.log("成功:" + result);
}).catch(function (reason) {
    console.log("失敗:" + reason);
});

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

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

相關(guān)文章

  • ES6(ECMAScript 6)新特性

    摘要:目前的標(biāo)準(zhǔn)化工作正在進(jìn)行中,預(yù)計會在年月份放出正式敲定的版本。反的方法可以接收一個參數(shù)并且返回值取決與它的構(gòu)造函數(shù)。之后就可以用這個返回值做為對象的鍵了。 本文基于lukehoban/es6features ,同時參考了大量博客資料,具體見文末引用。 ES6(ECMAScript 6)是即將到來的新版本JavaScript語言的標(biāo)準(zhǔn),代號harmony(和諧之意,顯然沒有跟上我國的步伐...

    impig33 評論0 收藏0
  • 2015 年度小結(jié)(技術(shù)方面)

    摘要:因為路由層面受業(yè)務(wù)影響很大,經(jīng)常修改一些功能的行為,所以后來大部分測試都是針對層面的單元測試。在我了解的過程中,我發(fā)現(xiàn)中文網(wǎng)絡(luò)上對的討論非常分散,于是我創(chuàng)建了中文社區(qū),到年末已經(jīng)有個注冊用戶和個帖子了。 https://jysperm.me/2016/02/programming-of-2015/ 從 2014 年末開始開發(fā)的一個互聯(lián)網(wǎng)金融項目終于在今年三月份上線了,這是一個 Node...

    宋華 評論0 收藏0
  • 2015 年度小結(jié)(技術(shù)方面)

    摘要:因為路由層面受業(yè)務(wù)影響很大,經(jīng)常修改一些功能的行為,所以后來大部分測試都是針對層面的單元測試。在我了解的過程中,我發(fā)現(xiàn)中文網(wǎng)絡(luò)上對的討論非常分散,于是我創(chuàng)建了中文社區(qū),到年末已經(jīng)有個注冊用戶和個帖子了。 https://jysperm.me/2016/02/programming-of-2015/ 從 2014 年末開始開發(fā)的一個互聯(lián)網(wǎng)金融項目終于在今年三月份上線了,這是一個 Node...

    Nosee 評論0 收藏0

發(fā)表評論

0條評論

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