async forEach next 方法不等待
async forEach next method not waiting
我的以下代码在我的照片 find()
promise 完成之前触发异步下一个回调。
我以为 async.forEach
直到调用 next
才触发。
我正在尝试让我的照片[0] 以与传入 category:item.strId 相同的顺序出现。现在它不是那样工作的,并且正在返回随机顺序。有没有办法在 forEach 的下一个循环发生之前等待承诺。我认为这就是异步回调的目的。还是我误会了。
exports.fetchHomeCollection = (req, res, next)=>{
const collection = [];
Category.find({count : { $gt : 0}}).then(categories =>{
async.forEach(categories, function(item, next){
console.log("item.strId = ", item.strId);
Photo.find({isDefault:true, category:item.strId}).then((photo)=>{
console.log("photo = ", photo);
collection.push(photo[0]);
next();
});
},
function(err){
if(err) console.log("fetchHomeCollection async forEach error");
res.send(collection);
});
})
}
我正在使用 global.Promise 作为我的 mongoose.promise
:
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
不要将 Promise 与 async.js 混用。他们不能很好地协同工作。
exports.fetchHomeCollection = (req, res, next)=>{
async.waterfall([
function (cb) {
Category.find({ count: { $gt : 0 }}, cb);
},
function (categories, cb) {
async.map(categories, function (category, next) {
Photo.findOne({ isDefault:true, category: category.strId }, next);
}, cb);
}
],
function (err, photos) {
if (err)
console.log("fetchHomeCollection async forEach error");
res.send(photos);
});
};
我的以下代码在我的照片 find()
promise 完成之前触发异步下一个回调。
我以为 async.forEach
直到调用 next
才触发。
我正在尝试让我的照片[0] 以与传入 category:item.strId 相同的顺序出现。现在它不是那样工作的,并且正在返回随机顺序。有没有办法在 forEach 的下一个循环发生之前等待承诺。我认为这就是异步回调的目的。还是我误会了。
exports.fetchHomeCollection = (req, res, next)=>{
const collection = [];
Category.find({count : { $gt : 0}}).then(categories =>{
async.forEach(categories, function(item, next){
console.log("item.strId = ", item.strId);
Photo.find({isDefault:true, category:item.strId}).then((photo)=>{
console.log("photo = ", photo);
collection.push(photo[0]);
next();
});
},
function(err){
if(err) console.log("fetchHomeCollection async forEach error");
res.send(collection);
});
})
}
我正在使用 global.Promise 作为我的 mongoose.promise
:
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
不要将 Promise 与 async.js 混用。他们不能很好地协同工作。
exports.fetchHomeCollection = (req, res, next)=>{
async.waterfall([
function (cb) {
Category.find({ count: { $gt : 0 }}, cb);
},
function (categories, cb) {
async.map(categories, function (category, next) {
Photo.findOne({ isDefault:true, category: category.strId }, next);
}, cb);
}
],
function (err, photos) {
if (err)
console.log("fetchHomeCollection async forEach error");
res.send(photos);
});
};