Javascript 异步瀑布未按预期工作
瀑布函数有两个调用,但第二个调用并不等待第一个调用完全完成。第一个函数中有一个mongodb.find()调用。 下面是异步瀑布函数Javascript 异步瀑布未按预期工作,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,瀑布函数有两个调用,但第二个调用并不等待第一个调用完全完成。第一个函数中有一个mongodb.find()调用。 下面是异步瀑布函数 app.get("/news", function(req, res) { async.waterfall([ function (callback) { var blogs = tendigiEngine.getAllBlogs(callback); callback(null, blo
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():
单独的博客():
重要的是,在getAllBlogs()返回blog之前,不会调用单独的blog,但在返回值之前调用它。我使用Async_瀑布来避免这个问题,但它总是重复出现,这意味着我用错了。我在这里做错了什么?我该如何修复它
谢谢 导出的函数缺少回调参数:
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);
});
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);
});