网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

擴展微信小程序框架功能:Promise

發布時間:2018-04-14 15:10 所屬欄目:小程序開發教程

ES6 對 Promise 有了原生的支持,但微信開發者工具更新版本(0.11.112200)后, 移除了開發者工具對 ES6 中 Promise 特性原生的支持, 理由是因為實體機器是不支持 Promise 的, 所以需要引入第三方的 Promise 庫。

Promise

Promise是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。

所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise是一個對象,從它可以獲取異步操作的消息。Promise提供統一的API,各種異步操作都可以用同樣的方法進行處理。

Promise對象有以下兩個特點:

  • 對象的狀態不受外界影響。Promise對象代表一個異步操作,有三種狀態:Pending(進行中)、Resolved(已完成,又稱Fulfilled)和Rejected(已失敗)。只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。

  • 一旦狀態改變,就不會再變,任何時候都可以得到這個結果。 Promise對象的狀態改變,只有兩種可能:從Pending變為Resolved和從Pending變為Rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果。就算改變已經發生了,你再對Promise對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過它,再去監聽,是得不到結果的。

有了Promise對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操作更加容易。Promise也有一些缺點。首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處于Pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。

es-promise

es6-promise 是一個兼容 ES6 Promises 的Polyfill類庫。 它基于 RSVP.js 這個兼容 Promises/A+ 的類庫, 它只是 RSVP.js 的一個子集,只實現了Promises 規定的 API。

基本用法

創建Promise對象

    new Promise(function(resolve) {
        reslove(42);
    })
    function helloWorld(ready) {        return new Promise(function(resolve, reject) {            if (ready) {
                resolve("Hello World!");
            } else {
                reject("Good bye!");
            }
        });
    }
    helloWorld(true).then(function(message) {        console.log(message);
    }, function(error) {        console.log("Error:", error);
    }); // 輸出:  Hello World!
    helloWorld(false).then(function(message) {        console.log(message);
    }, function(error) {        console.log("Error:", error);
    }); // 輸出:  Error: Good bye!

以上代碼,helloWord 函數接受一個參數,如果為true輸出”Hello World!”,如果為false就輸出錯誤的信息。helloWord 函數返回的是一個 Promise 對象。resolve 方法可以使 Promise 對象的狀態改變成成功,同時傳遞一個參數用于后續成功后的操作。reject 方法則是將 Promise 對象的狀態改變為失敗,同時將錯誤的信息傳遞到后續錯誤處理的操作。

每一個 Promise 都有一個 .then 方法,這個方法接受兩個參數,第一個是處理 resolved 狀態的回調,一個是處理 rejected 狀態的回調

Promise.all 可以接收一個元素為 Promise 對象的數組作為參數,當這個數組里面所有的 Promise 對象都變為 resolve 時,該方法才會返回。

    var p1 = new Promise(function(resolve) {
        setTimeout(function() {
            resolve("Hello");
        }, 3000);
    });    var p2 = new Promise(function(resolve) {
        setTimeout(function() {
            resolve("World");
        }, 1000);
    });

    Promise.all([p1, p2]).then(function(result) {        console.log(result); // 輸出: ["Hello", "World"]
    });

以上代碼,模擬了傳輸兩個數據需要不同的時長,雖然 p2 的速度比 p1 要快,但是 Promise.all 方法會按照數組里面的順序將結果返回。

其他



易優小程序(企業版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/23397.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×