免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動(dòng)推薦你的品牌,搶占AI流量入口!  點(diǎn)擊查看

小程序模板網(wǎng)

擴(kuò)展微信小程序框架功能:Promise

發(fā)布時(shí)間:2018-04-14 15:10 所屬欄目:小程序開發(fā)教程

ES6 對(duì) Promise 有了原生的支持,但微信開發(fā)者工具更新版本(0.11.112200)后, 移除了開發(fā)者工具對(duì) ES6 中 Promise 特性原生的支持, 理由是因?yàn)閷?shí)體機(jī)器是不支持 Promise 的, 所以需要引入第三方的 Promise 庫。

Promise

Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。

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

Promise對(duì)象有以下兩個(gè)特點(diǎn):

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

  • 一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。 Promise對(duì)象的狀態(tài)改變,只有兩種可能:從Pending變?yōu)镽esolved和從Pending變?yōu)镽ejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會(huì)再變了,會(huì)一直保持這個(gè)結(jié)果。就算改變已經(jīng)發(fā)生了,你再對(duì)Promise對(duì)象添加回調(diào)函數(shù),也會(huì)立即得到這個(gè)結(jié)果。這與事件(Event)完全不同,事件的特點(diǎn)是,如果你錯(cuò)過它,再去監(jiān)聽,是得不到結(jié)果的。

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

es-promise

es6-promise 是一個(gè)兼容 ES6 Promises 的Polyfill類庫。 它基于 RSVP.js 這個(gè)兼容 Promises/A+ 的類庫, 它只是 RSVP.js 的一個(gè)子集,只實(shí)現(xiàn)了Promises 規(guī)定的 API。

基本用法

創(chuàng)建Promise對(duì)象

    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 函數(shù)接受一個(gè)參數(shù),如果為true輸出”Hello World!”,如果為false就輸出錯(cuò)誤的信息。helloWord 函數(shù)返回的是一個(gè) Promise 對(duì)象。resolve 方法可以使 Promise 對(duì)象的狀態(tài)改變成成功,同時(shí)傳遞一個(gè)參數(shù)用于后續(xù)成功后的操作。reject 方法則是將 Promise 對(duì)象的狀態(tài)改變?yōu)槭?,同時(shí)將錯(cuò)誤的信息傳遞到后續(xù)錯(cuò)誤處理的操作。

每一個(gè) Promise 都有一個(gè) .then 方法,這個(gè)方法接受兩個(gè)參數(shù),第一個(gè)是處理 resolved 狀態(tài)的回調(diào),一個(gè)是處理 rejected 狀態(tài)的回調(diào)

Promise.all 可以接收一個(gè)元素為 Promise 對(duì)象的數(shù)組作為參數(shù),當(dāng)這個(gè)數(shù)組里面所有的 Promise 對(duì)象都變?yōu)?resolve 時(shí),該方法才會(huì)返回。

    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"]
    });

以上代碼,模擬了傳輸兩個(gè)數(shù)據(jù)需要不同的時(shí)長(zhǎng),雖然 p2 的速度比 p1 要快,但是 Promise.all 方法會(huì)按照數(shù)組里面的順序?qū)⒔Y(jié)果返回。

其他



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.szcjxy.com/wxmini/doc/course/23397.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢: 點(diǎn)擊咨詢
在線客服