即使在使用 async.series 之后,我的函数也没有按顺序执行

Posted

技术标签:

【中文标题】即使在使用 async.series 之后,我的函数也没有按顺序执行【英文标题】:my functions are not executing in series even after using async.series 【发布时间】:2013-09-20 23:27:54 【问题描述】:
var async = require('async');
var connection = require('../../models/connection/connection').connection;
var about_model = require('../../models/about/about_model')(connection);

module.exports = 
    getAboutInfo: function(req, res) 

        async.series([

            function(callback) 

                about_model.getDob(req.params.id, function(err, rows) 
                    dob = rows[0].user_dob;
                );
                callback();
            ,
            function(callback) 
                console.log(dob);
                callback();
            
        ], function(err) 
            if(err) throw err;
            else
                res.render('about', 
                    title: "About Page",
                    dob: dob
                );
        );
    

【问题讨论】:

请添加一些文字来解释您的预期,实际发生的情况,您尝试解决问题的方法,... 先生,我希望这些函数能够串行执行……但这些函数不能以这种方式工作。在第二个函数中,console.log(dob) 正在打印 undefined.. 我也无法在 res.render 处获得 dob 的值 【参考方案1】:

async 函数中的回调点是告诉async 你什么时候完成了。在

        function(callback) 

            about_model.getDob(req.params.id, function(err, rows) 
                dob = rows[0].user_dob;
            );
            callback();
        

您在操作完成之前致电callback,因此async 认为您已经完成,即使您还没有完成。如果你移动它:

        function(callback) 

            about_model.getDob(req.params.id, function(err, rows) 
                dob = rows[0].user_dob;
                callback();
            );

        

那么它应该可以正常工作。

【讨论】:

以上是关于即使在使用 async.series 之后,我的函数也没有按顺序执行的主要内容,如果未能解决你的问题,请参考以下文章

async.series / async.waterfall在post方法中有效吗?

async.series

嵌套在 async.eachSeries 循环中的 async.series 终止提前发送 POST 响应

node.js async.series 不工作

nodejs async series 小白向

如何在caolan async中使用await?