不經意看到了乙個構思非常驚人的非同步流程控制庫,發出來分享下
關於commonjs promises請看另乙個非同步庫
整個**非常簡潔,易用,不過呢是小日本寫的東西…
api手冊:
載入jsdeferred定義延遲物件。為方便起見,我們用deferred.define()方法把介面匯出到全域性作用於中
deferred.define();通過這樣做,你就能使用如 next(), loop(), call(), parallel() and wait() 這樣的全域性函式方法,讓我們抒寫一些非同步的流程
next(function這個流程中,開始會彈出 「hello」,然後過5秒接著會彈出 「world」() ).
next(
function
() );
deferred.next(function上面是抒寫同上() ).
next(
function
() );
個人分析:
用deferred.define()方法,無疑汙染了全域性作用域,入侵性太強了,跟mootools,prototype一樣, 不過好處嘛,很明顯,簡單易用了
還好jsdeferred也提供了無侵入的寫法
亮原始碼:
deferred.define = function可以傳入乙個物件,用作上下文(obj, list) )();
for (var i = 0; i < list.length; i++)
return
deferred;
};
var o = {}; //deferred.methods = ["parallel", "wait", "next", "call", "loop", "repeat", "chain"];定義乙個物件
deferred.define(o);//
把deferred的方法加持到它上面,讓o成為乙個deferred子類。
o.next(function
())
next方法
根據原始碼看來deferred.next其實就是乙個靜態方法
deferred.next =deferred.next_faster_way_readystatechange顯而易見,next方法是有四種選擇優先順序,為什麼要這樣呢?||deferred.next_faster_way_image
||deferred.next_tick
|| deferred.next_default;
我是基於webkit的遊覽器,所以我們就直接看deferred.next_faster_way_image
//流程:由此可見modern browsers
var d = new
deferred();
var img = new
image();
var handler = function
() ;
img.addeventlistener("load", handler, false
); img.addeventlistener("error", handler, false
); d.canceller = function
() ;
img.src = "data:image/png," +math.random();
if (fun) d.callback.ok =fun;
return d;
next(fn).next(fn).next(fn)其實就是
第乙個 next() deferred.next_faster_way_image () 返回 d第二個next(),其實就是例項deferred類的原型方法了第二個 next() d.next()
具體我們看
next: function(fun) ,
_post: function看到_post方法,就有撥開雲霧見月明的感覺了(okng, fun) ,
其實內部會有重新生成乙個 deferred物件掛到父例項的 next上,在繫結**..
如此依次迴圈處理
所以初始化的時候其實內部就生成了這麼乙個佇列
_next 上都掛著下乙個佇列處理
此時都是在初始化準備好的了,在執行的時候 image 在成功**中,我們呼叫了 d.call();
執行例項的call方法
call: function(val) ,
_fire: function總結:構思很特別,把每次鏈式的**掛到內部的next子屬性中,在處理上也保持了一條線的引用關係,而不是常規的用陣列的方式存起來(okng, value)
catch
(e)
if(deferred.isdeferred(value))
else
return
this
; }
當然上面僅僅只是同步方法的處理分析,也不是標準的遵循commonjs promises規範去抒寫的
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...
redux原始碼分析(三) 原始碼部分
下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...