【发布时间】:2017-04-19 07:19:52
【问题描述】:
我正在尝试使用 async.parallel 执行两个 Mongoose 查询,然后对结果执行一些操作。但是,当我尝试以 results[0] 和 results[1] 访问这些结果时,它们将作为 Promises 返回:
Promise {
_c: [],
_a: undefined,
_s: 0,
_d: false,
_v: undefined,
_h: 0,
_n: false } ]
我仍在熟悉 async 和 Promise,但不确定如何实际访问应该由这两个查询返回的文档。任何帮助将不胜感激!
我目前的功能:
export const getItems = (req, res) => {
const itemId = "57f59c5674746a6754df0d4b";
const personId = "584483b631566f609ebcc833";
const asyncTasks = [];
asyncTasks.push(function(callback) {
try {
const result = Item.findOne({ _id: itemId }).exec();
callback(null, result);
} catch (error) {
callback(error);
}
});
asyncTasks.push(function(callback) {
try {
const result = User.findOne({ _id: personId }).exec();
callback(null, result);
} catch (error) {
callback(error);
}
});
async.parallel(asyncTasks, function(err, results) {
if (err) {
throw err;
}
const result1 = results[0];
const result2 = results[1];
console.log('result' + result1);
});
}
【问题讨论】:
-
你应该使用 either async.js 或 promises,但不能同时使用。
-
@Bergi - 我打算补充一下,但实际上找不到任何(合理的)讨论为什么同时使用两者是一个坏主意 - 我同意这是一个坏主意,我不能证明原因:p
-
@JaromandaX 我想我在我的几个答案中讨论过,但也找不到好的链接。要点基本上是,当您将 nodebacks 与 Promise 混合使用时,进行正确的错误处理更容易出错,并且您基本上丧失了 Promise 相对于回调的所有优势。
标签: javascript asynchronous mongoose promise async.js