2017-08-08 10 views
1

最終結果/コールバックを呼び出し関数に返す方法は? このマニュアルのすべての例では、console.log()オプションのみが表示されています。Javascript async parallel - 最終結果/コールバックを返すには?

次のコードは単なる例示のためのものです。

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] 

編集:この質問は重複としてマークされました。もう1つの記事では、これがjavascriptやコールバックの経験が少ない人にどのように行われたのか説明していませんでした。

+1

をあなたは、コールバックを含める必要があります。 – alexmac

+0

あなたの2つの関数が実際に非同期でない場合、なぜ '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); 
     }); 
    } 

そして、あなたの呼び出しに変更します:あなた `foo`関数にコールバックを追加し、最終` async`コールバックからの結果とそれを呼び出す

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

}); 
+1

エラーを無視しないでください! 'async.parallel([...]、cb)'を直接使用してください。 – Bergi

+1

@DanielBjørnådal 'return'ステートメントはここでは必要ありません。 – alexmac

関連する問題