Async-WaterFall不按预期工作
瀑布函数有两个调用,但第二个不等待第一个完全完成。 第一个有一个mongodb.find()调用。 这是async-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; } }); }
seperateBlogs():
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()返回博客之前,不要调用seperateBlogs,但在返回值之前调用它是很重要的。 我使用Async_Waterfall来避免这个问题,但它不断重复,这意味着我使用它错了。 我在这里做错了什么,我该如何解决?
谢谢!
您的导出函数缺lesscallback参数:
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); });
- Node.js:node.js中的http.get方法是否有同步版本?
- 如何使用AWS Cognito SDK使用NodeJS从REST服务authentication用户?
- 等待函数结束(在async.series中)不能按预期工作
- 在nodejs中进行asynchronouscallback函数
- NodeJS,asynchronousforEachSeries执行顺序
- 我知道callback函数asynchronous运行,但为什么?
- node.js async.eachcallback,我怎么知道什么时候完成?
- 如何使用callback来等待两个查询asynchronous节点
- 从asynchronous调用的承诺和条件