我的代码就是这个
app.post('/get_page_data', function(req, res) {
function find (i,documents)
{
Item_data.find({item_name:documents[i].item_name}).exec(function (err,asd){
console.log(documents[i].item_name+": found");
console.log(asd[0].like);
}
)
}
Page_data.find().lean().exec(function (err, documents) {
var doc=documents;
async.series([
// 1st
function(done){
for(var i=0;i<documents.length;i++)
{
find(i,doc);
done()
}
},
// 2nd
function(done){
console.log("1");
console.log(doc);
console.log("2");
res.end(JSON.stringify(doc));
console.log("3");
done()
}
]);
}
)});
我将简单地介绍我的代码 当ajax调用/ get_page_data时 我将页面数据(第1页,第2页,第3页......)带入文档中 每个页面都有一个item_name,但页面数据没有&#34;喜欢&#34;数据 所以我找到&#34;的价值,像#34;在另一个集合(Item_data)中使用相同的项目名称并放入&#34; like&#34;在页面数据文件中
但这让我发疯了 页面数据在我输入类似值之前发送
所以我读到了非阻塞io和异步blahblah ...... 然后我找到了异步模块。并使用它。 但是,正如你可以看到上面的图片,他们没有工作
(在尝试异步模式之前,他们既没有工作也没有)
答案 0 :(得分:2)
您的find
函数正在进行异步调用,因此在返回任何数据之前调用done()
。
你应该在内部的find回调中移动它。
修改:直接使用async.each
代替async.series
。
app.post('/get_page_data', function(req, res) {
function find (document, cb) {
Item_data.find({item_name:document.item_name}).exec(function (err,asd) {
console.log(document.item_name+": found");
console.log(asd[0].like);
cb();
})
}
Page_data.find().lean().exec(function (err, documents) {
var doc=documents;
async.each(documents,
// 1st
find(document, cb),
// 2nd
function() {
console.log("1");
console.log(doc);
console.log("2");
res.end(JSON.stringify(doc));
console.log("3");
});
}
)});
PS:在这段代码中你还应该改进很多东西。但那样它应该有效。
答案 1 :(得分:0)
将完成的东西放在aysn函数中,并在索引值
时调用done app.post('/get_page_data', function(req, res) {
function find (i,documents,cb)
{
Item_data.find({item_name:documents[i].item_name}).exec(function (err,asd){
console.log(documents[i].item_name+": found");
console.log(asd[0].like);
console.log(i +"/"+ documents.length);
documents[i]["like"]=asd[0].like;
if(i==documents.length-1) cb();
//call done() when the index reached maximum
})
}
Page_data.find().lean().exec(function (err, documents) {
var doc=documents;
async.series([
// 1st
function(done){
for(var i=0;i<documents.length;i++)
{
find(i,doc,done); //put the done thing inside the function
}
},
// 2nd
function(done){
console.log("1");
console.log(doc);
console.log("2");
res.end(JSON.stringify(doc));
console.log("3");
done()
}
]);
正常工作