簡單實現非同步程式設計promise模式

2022-10-08 13:12:10 字數 2280 閱讀 2285

非同步程式設計

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...