包装承诺JavaScript通用功能

时间:2015-07-14 09:57:13

标签: javascript node.js promise q bluebird

如何在promise中包含一个可以同步/同步功能的函数?

我调用了以下函数

action[fn](req, res);

在函数fn(在下面的示例中)运行可以有内部(我使用动态调用每个函数)同步 a-sync如下例所示,

  
      
  1. 建议如何将其包装在承诺中。
  2.   
  3. 如果有任何处理错误......
  4.   

我使用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");
    }

1 个答案:

答案 0 :(得分:1)

例如,我们可以使用Q libary和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 event之后解析,然后res.end,但我建议创建另一个方法来完成响应并使用方法运行的promise。祝你好运!