Promise

一.Promise常見用法


function doSth() {

? ? return New Promise(function(result,reject) { //這里不是真正的反回

? ? ? ? ? ? result();

? ? })

}

或者可以這么寫

function doSth2() {

? ? var defer = Promise.defer();

? ? if(){defer.resolve();}

? ? return defer.promise;

}

之后,可以這么使用

doSth().then(doSth2()).then(doSth())

說的簡(jiǎn)單點(diǎn),Promise的作用就是把回調(diào)的各種函數(shù)變成鏈?zhǔn)秸{(diào)用,非常適合有潔癖的人使用。

二.Promise基本概念

先學(xué)習(xí)promise的基本概念。

promise只有三種狀態(tài),未完成,完成(fulfilled)和失敗(rejected)。

promise的狀態(tài)可以由未完成轉(zhuǎn)換成完成,或者未完成轉(zhuǎn)換成失敗。

promise的狀態(tài)轉(zhuǎn)換只發(fā)生一次

promise有一個(gè)then方法,then方法可以接受3個(gè)函數(shù)作為參數(shù)。前兩個(gè)函數(shù)對(duì)應(yīng)promise的兩種狀態(tài)fulfilled, rejected的回調(diào)函數(shù)。第三個(gè)函數(shù)用于處理進(jìn)度信息。

promiseSomething().then(function(fulfilled){

? ? //當(dāng)promise狀態(tài)變成fulfilled時(shí),調(diào)用此函數(shù)

},function(rejected){

? ? //當(dāng)promise狀態(tài)變成rejected時(shí),調(diào)用此函數(shù)

},function(progress){

? ? //當(dāng)返回進(jìn)度信息時(shí),調(diào)用此函數(shù)

});

nodeJs中也有Promise的概念

var Q = require('q');

var defer = Q.defer();

/**

* 獲取初始promise

* @private

*/

function getInitialPromise() {

? ? return defer.promise;

}

/**

* 為promise設(shè)置三種狀態(tài)的回調(diào)函數(shù)

*/

getInitialPromise().then(function(success){

? ? console.log(success);

},function(error){

? ? console.log(error);

},function(progress){

? ? console.log(progress);

});

defer.notify('in progress');//控制臺(tái)打印in progress

defer.resolve('resolve');? //控制臺(tái)打印resolve

defer.reject('reject');? ? //沒有輸出。promise的狀態(tài)只能改變一次

接著上面的代碼看

var Q = require('q');

var defer = Q.defer();

/**

* 通過defer獲得promise

* @private

*/

function getInputPromise() {

? ? return defer.promise;

}

/**

* 當(dāng)inputPromise狀態(tài)由未完成變成fulfil時(shí),調(diào)用function(fulfilled)

* 當(dāng)inputPromise狀態(tài)由未完成變成rejected時(shí),調(diào)用function(rejected)

* 將then返回的promise賦給outputPromise

* function(fulfilled) 和 function(rejected) 通過返回字符串將outputPromise的狀態(tài)由

* 未完成改變?yōu)閒ulfilled

* @private

*/

var outputPromise = getInputPromise().then(function(fulfilled){

? ? return 'fulfilled';

},function(rejected){

? ? return 'rejected';

});

/**

* 當(dāng)outputPromise狀態(tài)由未完成變成fulfil時(shí),調(diào)用function(fulfilled),控制臺(tái)打印'fulfilled: fulfilled'。

* 當(dāng)outputPromise狀態(tài)由未完成變成rejected, 調(diào)用function(rejected), 控制臺(tái)打印'fulfilled: rejected'。

*/

outputPromise.then(function(fulfilled){

? ? console.log('fulfilled: ' + fulfilled);

},function(rejected){

? ? console.log('rejected: ' + rejected);

});

/**

* 將inputPromise的狀態(tài)由未完成變成rejected

*/

defer.reject(); //輸出 fulfilled: rejected

/**

* 將inputPromise的狀態(tài)由未完成變成fulfilled

*/

//defer.resolve(); //輸出 fulfilled: fulfilled

先寫到這里吧,之后繼續(xù)更新。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //本文內(nèi)容起初摘抄于 阮一峰 作者的譯文,用于記錄和學(xué)習(xí),建議觀者移步于原文 概念: 所謂的Promise,...
    曾經(jīng)過往閱讀 1,320評(píng)論 0 7
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,226評(píng)論 0 12
  • Promiese 簡(jiǎn)單說就是一個(gè)容器,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果,語(yǔ)法上說,Pr...
    雨飛飛雨閱讀 3,489評(píng)論 0 19
  • 今天發(fā)現(xiàn)在關(guān)注呼吸的動(dòng)作之后,尋找短呼吸的成因很重要.
    行云流水longer閱讀 351評(píng)論 0 0
  • 最近幾年,真人秀極其盛行,《爸爸去哪兒》、《奔跑吧兄弟》、《真正男子漢》、《花樣姐姐》等等真人秀節(jié)目層出不窮,隨便...
    繼續(xù)吧人生閱讀 4,899評(píng)論 0 5

友情鏈接更多精彩內(nèi)容