【问题标题】:Wrap in promise JavaScript generic function [duplicate]包装在 promise JavaScript 通用函数中[重复]
【发布时间】:2015-10-02 21:35:33
【问题描述】:

如何用 promise 包装一个可以在内部具有同步/异步功能的函数?

我已经调用了如下函数

action[fn](req, res);

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

  1. 建议如何将其包装在 promise 中。
  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");
    }

【问题讨论】:

  • 实际问题是什么?为什么你认为 Promises 可以帮助你?

标签: javascript node.js promise q bluebird


【解决方案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 事件之后解析,然后 res.end,但我建议创建另一个方法来完成响应并使用方法 run 中的 promise。祝你好运!

【讨论】:

  • 谢谢,但是我应该如何处理调用方法中的错误?
  • 这将在异步(try-catch)中工作?
  • 类似trycatch,如果d被拒绝,如果resolve promise到达下一个链则执行catch
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2020-08-04
  • 2018-05-17
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多