2017-07-02 60 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) } 
] 

相反,我們正在採取的回調參數異步功能。