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

鍍金池/ 教程/ HTML/ API Reference
Promise 測(cè)試
實(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 對(duì)象,定義了處理 onFulfilled 和 onRejected 的函數(shù)(handler),然后返回這個(gè) promise 對(duì)象。

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

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

  • 定義的 handler 中產(chǎn)生異常的時(shí)候,這個(gè)值則會(huì)傳遞給 promise 對(duì)象的 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 對(duì)象。

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

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

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

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

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 對(duì)象。

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

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

    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 對(duì)象。

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

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

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

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 對(duì)象。

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

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