包装在promise JavaScript泛型函数中

Wrap in promise JavaScript generic function

本文关键字:函数 泛型 JavaScript promise 包装      更新时间:2023-09-26

我如何包装一个可以有同步/a-sync功能的函数与承诺?

我调用了如下的函数

action[fn](req, res);
函数fn中的

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

  1. 建议如何将它包装在promise中

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

例如,我们可以使用Q库和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结束事件后解析,然后是res.end,但我建议创建另一个方法来完成响应,并从方法run中使用promise。好运!