最有可能是我做了一些错误而且它太小而我无法识别它。
代码段 -
async.parallel
([
function(callback)
{
pictureset.findOne({ 'jebno': newz }, function (err, docsss)
{
if (err) return callback(err);
pictures = docsss;
console.log(docsss);
callback();
});
},
function(callback)
{
merchantmodel.findOne({ 'jebno': newz1 }, function (err, docss)
{
if (err) return callback(err);
merchantobject = docss;
console.log(docss);
callback();
});
},
function(err)
{
console.log(pictures);
console.log(merchantobject);
console.log("We are here");
res.json({ picturemodel: pictures, merchantobject: merchantobject, status: 100, message: 'Successfully Done1'});
if (err) return next(err);
}
]);
现在我期待这样的回复。
Value from console.log(docsss);
Value from console.log(docss);
Value from console.log(pictures);
Value from console.log(merchantobject);
we are here
但是我在控制台上得到的回复是
以下是控制台的实际摘录
undefined
undefined
We are here
function () {
var length = Math.max(arguments.length - startIndex, 0);
var rest = Array(length);
for (var index = 0; index < length; index++) {
rest[index] = arguments[index + startIndex];
}
switch (startIndex) {
case 0: return func.call(this, rest);
case 1: return func.call(this, arguments[0], rest);
}
// Currently unused but handle cases outside of the switch statement:
// var args = Array(startIndex + 1);
// for (index = 0; index < startIndex; index++) {
// args[index] = arguments[index];
// }
// args[startIndex] = rest;
// return func.apply(this, args);
}
{ _id: 5612c8950e1489f419ae1f0f,
jebno: '1231checka',
__v: 0,
photos:
[ '1445524441140_12023123_10156249375555727_859908445_n.jpg',
'1445524452856_12063857_919875394745615_3655186829888867333_n.jpg',
'1445524452873_491676259.jpg',
'1445524482917_12023123_10156249375555727_859908445_n.jpg',
'1445524894340_7a668c73cddcd2050821f83be901832a_1426070017.jpg',
'1445524894365_577161_424797084279112_1944605947_n.jpg',
'1445525002813_12063857_919875394745615_3655186829888867333_n.jpg' ] }
{ _id: 56645b9b29422ebad43b59be,
name: 'Ramesh Sharma',
email: 'ramesh@gmail.com',
password: 'ramesh',
jebno: '1455',
mobileno: '123456754',
address: 'Ramesh Chowk',
coverphoto: '1449689932496_12243392_10153773144324749_4504520513350378845_n.jpg',
ratings: 4,
totalratings: 12 }
答案 0 :(得分:1)
您需要在要并行运行的回调函数数组之后将最终回调函数作为第二个参数:
async.parallel([
function(callback){
pictureset.findOne({ 'jebno': newz }, function (err, docsss){
if (err) return callback(err);
pictures = docsss;
console.log(docsss);
callback();
});
},
function(callback){
merchantmodel.findOne({ 'jebno': newz1 }, function (err, docss){
if (err) return callback(err);
merchantobject = docss;
console.log(docss);
callback();
});
}
],
// optional callback
function(err, results){
console.log(pictures);
console.log(merchantobject);
console.log("We are here");
res.json({ picturemodel: pictures, merchantobject: merchantobject, status: 100, message: 'Successfully Done'});
if (err) return next(err);
});
答案 1 :(得分:1)
async.parallel
确实将一系列任务和作为回调,而不是将回调作为最后一个数组元素。
您的代码应如下所示:
async.parallel([
function(callback) {
pictureset.findOne({ 'jebno': newz }, callback);
},
function(callback) {
merchantmodel.findOne({ 'jebno': newz1 }, callback);
}
], function(err, results) {
if (err) return next(err);
var pictures = results[0],
merchantobject = results[1];
console.log(pictures);
console.log(merchantobject);
console.log("We are here");
res.json({
picturemodel: pictures,
merchantobject: merchantobject,
status: 100,
message: 'Successfully Done1'
});
});
答案 2 :(得分:1)
Ranganathan,两个答案基本上都说明了相同的解释如下:
将一系列函数传递给async.parallel。它同时运行它们。你不知道他们将以什么顺序开始,或何时结束。
最后一个函数,正如答案指出的那样,需要在数组之外,是最终的回调。它在两种情况下被调用:
其中,上面数组中传递的所有函数都已成功完成。如果您在每个函数的回调中提供了一些数据,那么该数据将显示在结果数组中。错误对象(错误)将为null。
二,如果产生任何错误,则传递给最终函数的错误对象(错误)将包含实际错误。您需要在代码中以某种方式处理该错误。