成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關于promise的學習和拓展

mayaohua / 2953人閱讀

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

Promise的學習和拓展

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

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

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

參數:executor是帶有 resolve 和 reject 兩個參數的函數 。Promise構造函數執(zhí)行時立即調用executor 函數, resolve 和 reject 兩個函數作為參數傳遞給executor(executor 函數在Promise構造函數返回所建promise實例對象前被調用)。resolve 和 reject 函數被調用時,分別將promise的狀態(tài)改為fulfilled(完成)或rejected(失?。xecutor 內部通常會執(zhí)行一些異步操作,一旦異步操作執(zhí)行完畢(可能成功/失敗),要么調用resolve函數來將promise狀態(tài)改成fulfilled,要么調用reject 函數將promise的狀態(tài)改為rejected。如果在executor函數中拋出一個錯誤,那么該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秒鐘后調用callback函數
console.log("after setTimeout()");

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

before setTimeout()
after setTimeout()
Done
AJAX就是典型的異步操作
var ajax = ajaxGet("http://...");
ajax.ifSuccess(success)
    .ifFail(fail);
統一執(zhí)行AJAX邏輯,不關心如何處理結果,然后,根據結果是成功還是失敗,在將來的某個時候調用success函數或fail函數。
這個時候promise方法就應運而生了。
一個簡單的promise應用
生成一個0-2之間的隨機數,如果小于1,則等待一段時間后返回成功,否則返回失?。?/pre>
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í)行函數,我們就可以用一個Promise對象來執(zhí)行它,并在將來某個時刻獲得成功或失敗的結果:

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

也可以寫成鏈式調用的形式

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

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

轉載請注明本文地址:http://systransis.cn/yun/104295.html

相關文章

  • ES6(ECMAScript 6)新特性

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

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

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

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

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

    Nosee 評論0 收藏0

發(fā)表評論

0條評論

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