非同步程式設計
j**ascript非同步程式設計, web2.0時代比較熱門的程式設計方式,我們平時碼的時候也或多或少用到,最典型的就是非同步ajax,傳送非同步請求,繫結**函式,請求響應之後呼叫指定的**函式,沒有阻塞其他**的執行。還有像settimeout方法同樣也是非同步執行**的方法。
如果對非同步程式設計還不太熟悉的話,直接戳 阮一峰大牛的教程 ,這篇文章介紹了四種非同步程式設計的方式:
這幾種方式的可維護性逐級遞增,理解難度也逐級遞增。這篇總結也是針對promise模式的。
promise模式
那麼多中非同步程式設計的方式,為什麼選擇promise, 因為前面幾種方式不夠靈活,用起來不夠痛快,不優雅。為了降低非同步程式設計的複雜性,所以promise。
promise的核心是有乙個promise物件,這個物件有乙個重要的then()方法, 它用於指定**函式,如:
f1().then(f2);
promise模式在任何時刻都有三種狀態:已完成(resolved),未完成(unfulfilled),那麼then()方法就是為狀態變化指定不同的**函式,並總是返回乙個promise物件,方便鏈式呼叫。
那promise模式下,返回的資料如何在各個**函式之間傳播呢,通過resolve方法,你可以將乙個函式的返回值作為引數傳遞給另乙個函式,並且將另乙個函式的返回值作為引數再傳遞給下乙個函式……像一條「鏈」一樣無限的這麼做下去。
**實現
通過建立乙個promise建構函式來實現promise模式:
//constructor
var promise = function()
promise.prototype = ,
reject: function(result) ,
complete: function(type, result)
}, then: function(success failedhandler) );
return this; }}
// test
var promise = new promise();
var delay1 = function() , 1000);
return promise;
};var callback1 = function(re) ;
delay1().then(callback1)
**分析
我們可看到乙個簡單的promise物件的建構函式的結構:
測試:var promise = new promise();
var delay1 = function() 程式設計客棧, 1000);
return promise;
};var callback1 = function(re) ;
var callback2 = function(re) ;
delay1().then(callback1).then(callback2);
結果:一秒之後輸出:
分析://第一步
var delay1 = function() , 1000);
return promise;
};這個函式通過settimeout方法,非同步傳遞乙個資料1,並返回乙個promise物件(必須)。
//第二步
var callback1 = function(re) ;
callback1和xaosczuzcallback2都是要通過then方法註冊的**函式,其中callback1通過resolve方法把資料往下傳遞。
//第三步
delay1().then(callback1).then(callback2);
delay1()方法執行完,因為返回了乙個promise物件,所以可以再呼叫then()方法為delay1()的settimeout非同步執行操作指定**函式, 又因為then()方法也返回的是promise物件,所以還可以再呼叫then方法
//第四步
settimeout(function() , 1000);
一秒之後,當其他**執行完成,開始執行非同步**promise.resolve('資料1');,這裡呼叫promise的resolve()方法,指定了乙個成功狀態,並把資料1作為引數。
//第五步
resolve: function(result) ,
//第六步:迴圈執行**,將上乙個**的結果傳遞給下乙個**
complete: function(type, result)
},這其中比較難理解的就是第五,六步。
本文標題: 簡單實現非同步程式設計promise模式
本文位址: /ruanjian/j**a/129072.html
Promise 非同步程式設計
promise 是非同步程式設計的解決方案,他代表承諾,便是一定會丟擲兩種狀態,狀態一經確定就不會改變 編譯成功 resolve value 為 必選 編譯失敗 reject error 可選 使用then 接收正確的丟擲 then 後面接 catch function error 可以簡寫為fun...
Promise非同步程式設計
當我們用 ajax去請求有依賴的多個資料的時候,編寫會形成漏斗形狀的結構,可讀性差,可以使用es6提供的promise promise概述 promise是非同步程式設計的一種解決方案,從語法上講,promise是乙個物件,從它可以獲得非同步操作的訊息 使用promise有以下好處 可以避免多層非同...
Promise非同步程式設計
例項化promise物件,建構函式中傳遞函式,該函式中用於處理非同步任務 resolve和reject兩個引數用於處理成功和失敗兩種情況,並通過p.then獲取處理結果 在呼叫then時可以只傳入正常情況函式處理,不傳入異常情況函式,即只處理成功情況 我們使用new來構建乙個promise prom...