2017-07-02 10 views
1

操作を行うために、waterfallの代わりにparallelを使用します。node.jsで非同期操作を構築できません

私はマングースを使用し、私はなぜ私が2行目に予期しないトークンを取得しています。この

module.exports.updateStatus = function(task_id, status, callback){ 
    Task.findOneAndUpdate({_id: task_id}, 
     {$set: {status}}, 
     {upsert: true,'new':true}, 
     callback) 
} 

ようなモデルの方法がありますか?

async.parallel([ 
    Task.updateStatus(id, status, (err, resp), callback) => { 
     callback(err, resp) 
    }, 
    Credit.addCredit(user_id, 10, (err, resp), callback) => { 
     callback(err, resp) 
    } 
], (err, resp) => { 
    if(err){ 
     return handleError(err, 'Failed to update task status', res) 
    } 

    res.json({ 
     success: true, 
     result: {task: resp} 
    }) 
}) 

答えて

0

あなたの構文が間違っている、非同期parllelは関数の配列を受け取り、各関数は、関数に渡される必要があるコールバックを持っており、現在の関数が終了します一度呼び出されます。

関数を呼び出そうとしていますが、各タスクが関数を呼び出すためにタスクの配列を渡す必要があり、それらのタスクにパラメータを間違って渡しています。ドキュメントasync parallelを確認し、下の例を見つけてください。

async.parallel([ 
     function(callback){ 
      updateStatus(id, status, callback) 
     }, 
     function (callback) { 
      addCredit(user_id, 10, callback) 
     }], (err, resp) => { 
      if(err){ 
       return handleError(err, 'Failed to update task status', res) 
      } 
      res.json({ 
       success: true, 
       result: {task: resp} 
      }) 
    }); 
+0

私はupdateStatusでエラーが発生しましたか? addCreditは実行されますか? –

+0

関数のいずれかがコールバックにエラーを渡すと、メインのコールバックがエラーとともにすぐに呼び出されます。続行したい場合は、それぞれasyncを使用し、受信したエラーでコールバックを呼び出すかどうかを決定することができます。 –

+0

私のエラーハンドルは正しいですか?なぜいくつかの人がキャッチして新しいError()を投げているのですか? –

0

これは無効な一部です:

async.parallel([ 
    Task.updateStatus(id, status, (err, resp), callback) => { 
     callback(err, resp) 
    }, 
    Credit.addCredit(user_id, 10, (err, resp), callback) => { 
     callback(err, resp) 
    } 
] 

あなたがしようと、一度にそれを2つのコールバックを与えている:私たちはからのコールバックパラメータを取っているところ、

async.parallel([ 
    function(callback) { Task.updateStatus(id, status, (err, resp), callback) } 
    function(callback) { Credit.addCredit(user_id, 10, (err, resp), callback) } 
] 

を代わりに非同期関数

関連する問題