在 今年九月份參加的 Facebook World Hack 活動中,
我和朋友中場休息時間有和 上次在香港見過的 Facebook 的 Wei 討論了一下 NodeJS,
雖然沒有很深入,
不過 他介紹了一個 Nodejs 套件 sync 還蠻有趣的,
在這裡紀錄分享。
sync 是 base 在 node-fibers library 的套件,
透過這個 sync 我們可以寫出其實是 callback ,
但寫起來卻像是 sync style 的 程式碼。
要使用 sync ,
首先要先透過 npm 安裝
$ npm install sync
接下來,
就讓我們看一下 sync 的範例程式吧!
var Sync = require('sync');
function asyncFunction(a, b, callback) {
process.nextTick(function(){
callback(null, a + b);
});
};
Sync(function(){
var a, b, c;
// section 1
asyncFunction(2,3, function(e, result) {
console.log(result); //5
c = result + 10;
console.log( c ); //15
});
// section 2
a = asyncFunction.sync(null, 2, 3);
console.log(a); // 5
var b = a + 10;
console.log(b); //15
});
// section 3
asyncFunction(2,3, function(e, result) {
console.log(result); //5
var c = result + 10;
console.log( c ); //15
});
在上面的程式,
我們建立了傳統的 asyncFunction
接著我們在三個地方 呼叫該程式並做運算,
section1 跟 section 2都在 Sync (function()...內
而 三個 section 的結果 都是一樣的
我們可以發現 傳統 callback 方式 理所當然可以在 一般程式區塊運作,
也可以在 Sync 的區塊內運作,
但最特別的是 section 2
這裡完全沒有 callback 的寫法,
變數 a 承接了 asyncFunction callback 回來的值,
如此一來程式在撰寫上就簡潔些,
不過因為必須在 Sync(function()… 內運作,
實戰上,
還是會有困擾就是。
有興趣的朋友,
可以到 https://github.com/0ctave/node-sync
取得更多的說明與原始程式碼。
Technorati Tags: 2012, Facebook, github, Nodejs, Sync, World Hack, node-fibers
留言列表