callback已被称为asynchronous并行

您好我正在尝试使用asynchronous模块来检索两个用户,并做了一些处理后,他们都被检索,但我不断收到错误消息:callback已被调用。 以下是我目前的代码:

app.get('/api/addfriend/:id/:email', function(req, res) { var id = req.params.id; var friendEmail = req.params.email; async.parallel([ //get account function(callback) { accountsDB.find({ '_id': ObjectId(id) }, function(err, account) { console.log(id); if (err || account.length === 0) { callback(err); } console.log(account[0]); callback(null, account[0]); }); }, //get friend function(callback) { accountsDB.find({ 'email': friendEmail }, function(err, friend) { console.log(friendEmail); if (err || friend.length === 0 || friend[0].resId === undefined) { callback(err); } console.log(friend[0]); callback(null, friend[0].resId); }); } ], //Compute all results function(err, results) { if (err) { console.log(err); return res.send(400); } if (results === null || results[0] === null || results[1] === null) { return res.send(400); } //results contains [sheets, Friends, Expenses] var account = results[0]; var friend = results[1]; if (account.friends_list !== undefined) { account.friends_list = account.friends_list + ',' + friend; } else { account.friends_list = friend; } // sheetData.friends = results[1]; accountsDB.save( account, function(err, saved) { if (err || !saved) { console.log("Record not saved"); } else { console.log("Record saved"); return res.send(200, "friend added"); } } ); } ); }); 

任何帮助,将不胜感激。

向你的代码添加else语句,因为如果你得到错误,你的callback会执行两次

 if (err || account.length === 0) { callback(err); } else { callback(null, account[0]); } 

来自asynchronous的文档实际上说 :

确保在提前调用callback时总是返回,否则在很多情况下会导致多个callback和不可预知的行为。

所以你可以这样做:

 return callback(err);