2014-01-22 44 views
11

我需要做這樣的代碼如下:Node.js的異步系列函數的參數

function taskFirst(k, v) { 
    console.log(k, v); 
} 

function taskSecond(k, v) { 
    console.log(k, v); 
} 

function run() { 
    var g1 = "Something"; 
    var g2 = "Something"; 
    var g3 = "Something"; 
    var g4 = "Something"; 

    async.series(
     [ 
      taskFirst(g1, g2), 
      taskSecond(g3, g4) 
     ], 
     function(error, result){ 

     } 
    ); 
} 

什麼是自定義變量傳遞正確的方式和async.js回調函數?

回答

18

你可以做這樣的事情:

function taskFirst(k, v, callback) { 
    console.log(k, v); 

    // Do some async operation 
    if (error) { 
     callback(error); 
    } else { 
     callback(null, result); 
    } 
} 

function taskSecond(k, v, callback) { 
    console.log(k, v); 

    // Do some async operation 
    if (error) { 
     callback(error); 
    } else { 
     callback(null, result); 
    } 
} 

function run() { 
    var g1 = "Something"; 
    var g2 = "Something"; 
    var g3 = "Something"; 
    var g4 = "Something"; 

     async.series(
      [ 
       // Here we need to call next so that async can execute the next function. 
       // if an error (first parameter is not null) is passed to next, it will directly go to the final callback 
       function (next) { 
        taskFirst(g1, g2, next); 
       }, 
       // runs this only if taskFirst finished without an error 
       function (next) { 
        taskSecond(g3, g4, next);  
       } 
      ], 
      function(error, result){ 

      } 
     ); 
} 
2

它可以如下

function taskFirst(k, v) { 
    console.log(k, v); 
} 

function taskSecond(k, v) { 
    console.log(k, v); 
} 

async.series([ 
    function(callback) { 
     callback(null, taskFirst(g1, g2)); 
    }, 
    function(callback) { 
     callback(null, taskFirst(g3, g4)); 
    } 
],function(error, result){ 

}); 
+0

這是行不通的。該回調立即執行,以便異步移動到下一個功能。你應該將回調傳遞給你的函數,並且所有的執行都會在你的異步工作完成之後執行。 –

+0

是的 - 這個答案假定taskFirst內的代碼被阻塞。 – HexCoder

2

這個答案異步的github上的問題已經爲我完美。 https://github.com/caolan/async/issues/241#issuecomment-14013467

對你來說會是這樣的:

var taskFirst = function (k, v) { 
    return function(callback){ 
     console.log(k, v); 
     callback(); 
    } 
}; 
+0

謝謝,我想我需要包裝的功能,並返回它:) – nyarasha

+0

我需要創建一個動態數組的功能與我需要給async.series參數,你的答案幫助我在正確的方向,謝謝 –

1

更好的辦法。

const a1 = (a, callback) => { 
    console.log(a, 'a1') 
    callback() 
} 
const a2 = (a, callback) => { 
    console.log(a, 'a2') 
    callback() 
} 

const run =() => { 
    async.series([ 
     a1.bind(null, 'asd'), 
     a2.bind(null, 'asd2') 
    ],() => { 
     console.log('finish') 
    }) 
} 
run()