2017-07-02 32 views
1

我想使用并行而不是瀑布来执行操作。无法在node.js中构建异步操作

我用猫鼬,我有一个模型,像这样的

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

那我为什么在2号线出现了意外令牌的方法?

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中有错误,该怎么办?会添加信誉执行? –

+0

如果任何函数将错误传递给其回调函数,则会立即调用主回调函数,并返回错误。如果你想继续,你可能想要使用异步,并决定是否调用回调,收到错误。 –

+0

所以我的错误句柄是正确的?为什么有些人在做try catch并抛出新的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) 
    } 
] 

你让这两个回调一次,尝试:

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

相反,我们正在采取的回调参数异步功能。