封装承诺JavaScript通用函数

封装承诺JavaScript通用函数,javascript,node.js,promise,q,bluebird,Javascript,Node.js,Promise,Q,Bluebird,我如何包装一个功能,其中可以有同步/a-sync功能与承诺 我调用了如下函数 action[fn](req, res); 在函数fn(在下面的示例中)中,可以运行内部(我对每个函数使用动态调用)sync或a-sync,如下面的示例所示 如何用承诺来包装它 如果有错误,如何处理 我使用nodeJS应用程序 run: function (req, res, filePath) { var writeStream = fs.createWriteStream(fileRelPath

我如何包装一个功能,其中可以有同步/a-sync功能与承诺

我调用了如下函数

action[fn](req, res);
在函数fn(在下面的示例中)中,可以运行内部(我对每个函数使用动态调用)sync或a-sync,如下面的示例所示

  • 如何用承诺来包装它
  • 如果有错误,如何处理
  • 我使用nodeJS应用程序

     run: function (req, res, filePath) {
            var writeStream = fs.createWriteStream(fileRelPath, {flags: 'w'});
            req.pipe(writeStream);
            req.on("end", function () {
                console.log("Finish to update data file")
            });
            res.end("File " + filePath + " saved successfully");
        }
    

    例如,我们可以使用Qlibary和defer,如下所示:

    run: function (req, res, filePath) {
            var d = Q.defer();
    
            var writeStream = fs.createWriteStream(fileRelPath, {flags: 'w'});
            req.pipe(writeStream);
            req.on("end", function () {
                console.log("Finish to update data file");
                d.resolve();
            });
    
            req.on("error", function (err) {
                d.reject(err);
            });
    
    
    
            return d.promise.then(function(){
                res.end("File " + filePath + " saved successfully");
            }).catch(function(err){
                //handle error
            })
        }
    

    在这段代码中,promise将在req end事件之后解析,然后是res.end,但我建议为finish response创建另一个方法,并从方法run使用promise。祝你好运

    实际问题是什么?为什么您认为承诺可以帮助您?谢谢,但是我应该如何处理invoke方法中的错误?这将在异步(try-catch)中工作?类似于trycatch,如果d被拒绝,则执行catch如果解析承诺转到下一个链