在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ API Reference
Promise 測試
實(shí)戰(zhàn) Promise
用語集
前言
什么是 Promise
API Reference
Advanced

API Reference

5.1. Promise#then

    promise.then(onFulfilled, onRejected);

then 代碼示例

    var promise = new Promise(function(resolve, reject){
        resolve("傳遞給then的值");
    });
    promise.then(function (value) {
        console.log(value);
    }, function (error) {
        console.error(error);
    });

這段代碼創(chuàng)建一個(gè) promise 對象,定義了處理 onFulfilled 和 onRejected 的函數(shù)(handler),然后返回這個(gè) promise 對象。

這個(gè) promise 對象會在變?yōu)?resolve 或者 reject 的時(shí)候分別調(diào)用相應(yīng)注冊的回調(diào)函數(shù)。

  • 當(dāng) handler 返回一個(gè)正常值的時(shí)候,這個(gè)值會傳遞給 promise 對象的 onFulfilled 方法。

  • 定義的 handler 中產(chǎn)生異常的時(shí)候,這個(gè)值則會傳遞給 promise 對象的 onRejected 方法。

5.2. Promise#catch

    promise.catch(onRejected);

catch 代碼示例

    var promise = new Promise(function(resolve, reject){
        resolve("傳遞給then的值");
    });
    promise.then(function (value) {
        console.log(value);
    }).catch(function (error) {
        console.error(error);
    });

這是一個(gè)等價(jià)于 promise.then(undefined, onRejected) 的語法糖。

5.3. Promise.resolve

    Promise.resolve(promise);
    Promise.resolve(thenable);
    Promise.resolve(object);
    Promise.resolve代碼示例
    var taskName = "task 1"
    asyncTask(taskName).then(function (value) {
        console.log(value);
    }).catch(function (error) {
        console.error(error);
    });
    function asyncTask(name){
        return Promise.resolve(name).then(function(value){
            return "Done! "+ value;
    });
    }

根據(jù)接收到的參數(shù)不同,返回不同的 promise 對象。

雖然每種情況都會返回 promise 對象,但是大體來說主要分為下面3類。

接收到 promise 對象參數(shù)的時(shí)候
返回的還是接收到的 promise 對象

接收到 thenable 類型的對象的時(shí)候
返回一個(gè)新的 promise 對象,這個(gè)對象具有一個(gè) then 方法

接收的參數(shù)為其他類型的時(shí)候(包括 JavaScript 對或 null 等)
返回一個(gè)將該對象作為值的新 promise 對象

5.4. Promise.reject

    Promise.reject(object)

Promise.reject 代碼示例

     var failureStub = sinon.stub(xhr, "request").returns(Promise.reject(new Error("bad!")));

返回一個(gè)使用接收到的值進(jìn)行了 reject 的新的 promise 對象。

而傳給 Promise.reject 的值也應(yīng)該是一個(gè) Error 類型的對象。

另外,和 Promise.resolve 不同的是,即使 Promise.reject 接收到的參數(shù)是一個(gè) promise 對象,該函數(shù)也還是會返回一個(gè)全新的 promise 對象。

    var r = Promise.reject(new Error("error"));
    console.log(r === Promise.reject(r));// false

5.5. Promise.all

    Promise.all(promiseArray);

Promise.all代碼示例

    var p1 = Promise.resolve(1),
        p2 = Promise.resolve(2),
        p3 = Promise.resolve(3);
    Promise.all([p1, p2, p3]).then(function (results) {
        console.log(results);  // [1, 2, 3]
    });

生成并返回一個(gè)新的 promise 對象。

參數(shù)傳遞 promise 數(shù)組中所有的 promise 對象都變?yōu)?resolve 的時(shí)候,該方法才會返回, 新創(chuàng)建的 promise 則會使用這些 promise 的值。

如果參數(shù)中的任何一個(gè) promise 為 reject 的話,則整個(gè) Promise.all 調(diào)用會立即終止,并返回一個(gè) reject 的新的 promise 對象。

由于參數(shù)數(shù)組中的每個(gè)元素都是由 Promise.resolve 包裝(wrap)的,所以Paomise.all可以處理不同類型的promose對象。

5.6. Promise.race

    Promise.race(promiseArray);

Promise.race代碼示例

    var p1 = Promise.resolve(1),
        p2 = Promise.resolve(2),
        p3 = Promise.resolve(3);
    Promise.race([p1, p2, p3]).then(function (value) {
        console.log(value);  // 1
    });

生成并返回一個(gè)新的 promise 對象。

參數(shù) promise 數(shù)組中的任何一個(gè) promise 對象如果變?yōu)?resolve 或者 reject 的話, 該函數(shù)就會返回,并使用這個(gè) promise 對象的值進(jìn)行 resolve 或者 reject。

上一篇:前言下一篇:實(shí)戰(zhàn) Promise