2017-08-08 81 views
1

如何將最終結果/回調函數返回給調用函數? 文檔中的所有示例僅顯示console.log()選項。Javascript異步並行 - 如何返回最終結果/回調?

以下代碼僅用於示例目的。

function foo(input) { 
    async.parallel([ 
     function(callback) { 
      callback(null, input.one); 
     }, 
     function(callback) { 
      callback(null, input.two); 
     } 
    ], 
    function(err, results) { 
     // What to do here? all examples include console.log() 
     // I want to return the result ([1, 2]) to the calling function! 
    }); 
} 

var data = {"one": 1, "two": 2}; 
var bar = foo(data); 

console.log(bar); // Will return [1, 2] 

編輯:此問題被標記爲重複。另一篇文章沒有解釋如何對JavaScript和回調的邊緣經驗的人做這些事情。

+1

添加回調到你的'foo'功能,並與最終的'async'回調的結果調用它。 – alexmac

+0

如果你的兩個函數實際上不是異步的,你爲什麼要使用'async'? – Bergi

+0

@alexmac你可以請發佈答案嗎?我仍然試圖繞過回調:| –

回答

1

如果你的函數包含異步代碼,所以它變成了一個異步函數。你需要有一個回調:

function foo(input, cb) { 

     async.parallel([ 
      function(callback) { 
       callback(null, input.one); 
      }, 
      function(callback) { 
      callback(null, input.two); 
      } 
     ], 
     function(err, results) { 
     return cb(results); 
     }); 
    } 

並修改您的來電:

var data = {"one": 1, "two": 2}; 
foo(data, function(bar){ 
    console.log(bar); 

}); 
+1

不要忽略錯誤!只需直接使用'async.parallel([...],cb)'。 – Bergi

+1

@DanielBjørnådal'return'聲明並不是必需的。 – alexmac