包装承诺JavaScript通用功能

sho*_*a T 6 javascript node.js promise q bluebird

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

我打电话给下面的功能

action[fn](req, res);
Run Code Online (Sandbox Code Playgroud)

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

  1. 它是如何建议将其包装在诺言中.
  2. 如果有的话如何处理错误......

我使用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");
    }
Run Code Online (Sandbox Code Playgroud)

sia*_*olt 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
        })
    }
Run Code Online (Sandbox Code Playgroud)

在此代码中,promise 将在 req end 事件之后解析,然后 res.end,但我建议创建另一个方法来完成响应并使用方法运行中的 Promise。祝你好运!