2013-02-17 112 views
4

我不能讓我怎麼能執行一個回調後「ñ」異步功能被執行,例如:node.js的「N」異步回調執行後,執行功能

var after4AsyncOperation = function(){ 
    //do something... 
} 
process.nextTick(function(){ 
    //do stuff 
}) 
process.nextTick(function(){ 
    //do stuff 
}) 
process.nextTick(function(){ 
    //do stuff 
}) 
process.nextTick(function(){ 
    //do stuff 
}) 

是否有方式4個異步功能後執行after4AsyncOperation而不需要編寫一個函數,另外,前內:

var after4AsyncOperation = function(){ 
    //do something... 
} 
process.nextTick(function(){ 
    //do stuff 
    process.nextTick(function(){ 
     //do stuff 
     process.nextTick(function(){ 
      //do stuff 
      process.nextTick(function(){ 
       //do stuff 
       after4Asyncoperation(); 
      }) 
     }) 
    }) 
}) 

回答

7

我會建議使用異步庫,如Caolan's Async。然後,您可以使用async.parallel,async.seriesasync.autoauto是最靈活的,但比其他人慢;在parallelseries之間進行選擇將需要更多關於您要做什麼的信息 - 您的第一個示例將是一個並行操作,但您的第二個示例是串聯的。

但是,如果你不想使用庫,你可以寫一些自定義的東西。我想如下做到這一點:

var numFuncs = 4; 
var callback = function(){ 
    numFuncs--; 
    if(numFuncs == 0) { 
    after4AsyncOperation(); 
    } 
} 
var after4AsyncOperation = function(){ 
    //do something... 
} 
process.nextTick(function(){ 
    //do stuff 
    callback(); 
}) 
process.nextTick(function(){ 
    //do stuff 
    callback(); 
}) 
process.nextTick(function(){ 
    //do stuff 
    callback(); 
}) 
process.nextTick(function(){ 
    //do stuff 
    callback(); 
}) 

這個工作由我們預計回調被稱爲(numFuncs)的次數倒計時,只調用after4AsyncOperation當我們已經叫回來的時間正確的號碼。

2

你可以把具有此功能和許多其他不錯的FE偉大async庫的優勢atures。要做到明確你希望做什麼,你既可以使用系列:

https://github.com/caolan/async#series

或並行:

https://github.com/caolan/async#parallel

兩者之間的區別是一系列運行所有功能一個在下一個,而並行運行所有的人在同一時間。無論哪種情況,在完成這些工作後都會有一個回調,這是您似乎試圖完成的。