gpt4 book ai didi

javascript - Async-WaterFall 没有按预期工作

转载 作者:行者123 更新时间:2023-11-30 17:26:11 25 4
gpt4 key购买 nike

有两个调用的 waterfall 函数,但第二个调用没有等待第一个完全完成。第一个有一个 mongodb.find() 调用。这是异步 waterfall 函数

app.get("/news", function(req, res) {
async.waterfall([
function (callback) {

var blogs = tendigiEngine.getAllBlogs(callback);
callback(null, blogs);
},
function (blogs, callback) {

var array = tendigiEngine.seperateBlogs(blogs, callback);
callback(null, array );
}

], function (err, result) {
// result now equals 'done'
console.log("done");
console.log(result);
});

});

下面是被调用的两个函数:getAllBlogs():

exports.getAllBlogs = function() {

Blog.find(function(err, theBlogs){
if(!err) {
return theBlogs;
}
else {
throw err;
}

});
}

分离博客():

exports.seperateBlogs  = function(blogs) {

if(blogs.length === 0 ) {
return 0;
}
else {
blogs.reverse();
var blog = blogs[0];
blogs.shift();
var finArray = [blog, blogs];
return finArray;
}
console.log("asdf");
}

重要的是在 getAllBlogs() 返回 theBlogs 之前不会调用 seperateBlogs,但在返回值之前调用它。我使用 Async_Waterfall 来避免这个问题,但它一直重复出现,这意味着我使用错误。我在这里做错了什么,我该如何解决?

谢谢!

最佳答案

您导出的函数缺少回调参数:

exports.getAllBlogs = function(cb) {
Blog.find(cb);
};

exports.seperateBlogs = function(blogs, cb) {
if (blogs.length === 0 )
return cb(null, blogs);

blogs.reverse();
var blog = blogs[0];
blogs.shift();
cb(null, [blog, blogs]);
}

那么你的主要代码也可以简化:

async.waterfall([
tendigiEngine.getAllBlogs,
tendigiEngine.seperateBlogs
], function (err, result) {
// result now equals 'done'
console.log("done");
console.log(result);
});

关于javascript - Async-WaterFall 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com