BeautyEng

在 今年九月份參加的 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

arrow
arrow
    全站熱搜

    賽拉維‧柯南 發表在 痞客邦 留言(0) 人氣()