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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async.series / async.waterfall在post方法中有效吗?相关的知识,希望对你有一定的参考价值。

我在post方法中使用了async.series,但它似乎不起作用,当调用post请求时页面显示404找不到。

router.route('/brandinsert')
.post((req, res, next) => {
    console.log("inside post"); //terminates here
    async.series({
        one: (callback) => {
            uploadImageOne(req, res, (err) => {
                console.log('Inside uploadImageOne');
                callback(req, res, err);
            });
        },

        two: (callback) => {
            uploadImageTwo(req, res, (err) => {
                console.log('Inside uploadImageTwo');
                callback(req, res, err);
            });
        },
    }, (req, res, err) => {
         console.log('Inside req,res,err'); //does not reach here
        if(err){
            console.log('error :' + err); //does not reach here
            if (err == 'Error: imageExtensionError') {
                res.json({
                    status: false,
                    msg: "File has invalid extension"
                });
            } else if (err == "Error: File too large") {
                res.json({
                    status: false,
                    msg: "File size exceed the limit,Allowed limit is 3 MB"
                })
            } else {
                console.log("err else section:" + err);
                res.json({
                    status: false,
                    msg: genericErrorMessage
                })
            }
        }else{
            console.log("Inside else of insert");
            let brandHeaderImg = req.body.brandHeaderImg;
            let brandLogoImg = req.body.brandLogoImg;
            let errorArray = [];
            let msg = null;
            //insert images into db
        }
    });
})

我没有得到我做错了什么,有人可以帮忙吗?我对node.js相当新,如果问题看起来很傻,请原谅我。

答案

异步库中的回调需要调用为:

callback(err, arg1, arg2, arg3);

首先使用err参数,然后使用其他可选参数。如果没有错误并且您希望继续处理,那么您将传递null以获取错误:

callback(null, arg1, arg2, arg3);

仅供参考,javascript开发的趋势是“宣传”您拥有的任何异步操作(创建一个返回promise而不是使用普通回调的包装器),然后使用promise和async/await功能进行异步控制流和错误处理。我强烈建议用这种方式编写新代码,而不是使用传统回调的异步库。

node v10甚至包括一个fs库的promisified版本,越来越多的节点内部现在使用promises和async/await

以上是关于async.series / async.waterfall在post方法中有效吗?的主要内容,如果未能解决你的问题,请参考以下文章

node.js async.series 不工作

Node.js:async.series 中的 forEach

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

nodejs async series 小白向

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

node.js async.series 是它应该如何工作的?