2011-04-01 117 views
1

在我的應用程序中,我有n阻塞任務,一旦所有阻塞任務都執行完畢,我想最終執行我的非阻塞任務(依賴於來自這些阻塞任務的數據) 。阻止任務後執行非阻塞任務

我當前的解決方案是爲具有可變得到由一個在阻擋回調遞增,然後它檢查是否Ñ,如果是這樣,則執行從屬,無阻塞的任務。

但是,我覺得這是遠遠不夠完美的;我認爲這是一個很好的解決方案與異步編程的基本問題(雖然我一直無法找到一個更好的解決方案)。

var i; 

var result_one = null; 
var result_two = null; 

function render() { 
    if (i == 2) { 
     // do something with result_one and result_two 
    } 
} 

blocking.call(function(result) { 
    result_one = result; 
    i++; 
    render(); 
}); 

blocking.call2(function(result) { 
    result_two = result; 
    i++; 
    render(); 
}); 
+0

所以,你必須例如3異步調用,並且要運行一個回調的任務,一旦所有3個異步任務都做了?等待n個阻塞任務來運行一個非阻塞任務沒有任何意義,因爲這很容易,反之則更難。 – BGerrissen 2011-04-01 20:32:02

+0

爲什麼你需要回撥阻止呼叫?按順序執行n個同步調用,然後開始異步任務應該是非常直接的。請示例代碼。 – 2011-04-01 20:36:11

+0

添加示例代碼。 – Sirupsen 2011-04-01 21:19:58

回答

1

https://github.com/creationix/step

Step(
    // Loads two files in parallel 
    function loadStuff() { 
    fs.readFile(__filename, this.parallel()); 
    fs.readFile("/etc/passwd", this.parallel()); 
    }, 
    // Show the result when done 
    function showStuff(err, code, users) { 
    if (err) throw err; 
    sys.puts(code); 
    sys.puts(users); 
    } 
)