Javascript 异步瀑布未按预期工作

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

瀑布函数有两个调用,但第二个调用并不等待第一个调用完全完成。第一个函数中有一个mongodb.find()调用。 下面是异步瀑布函数

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);
});