【问题标题】:NodeJS Promisify an existing API with BlueBirdNodeJS Promisify 使用 BlueBird 的现有 API
【发布时间】:2015-07-21 00:23:34
【问题描述】:

我有一个非常简单的 API,它从服务器获取一些数据,进行一些处理,然后将其发送到客户端。我正在尝试“承诺”这个小模块。这是一个例子

var MyModule = function (){}

MyModule.prototype.makeRequest = function(requestURL){

    //Set request up
    //Return the promise for the request.
    return request(requestOptions);
}

MyModule.prototype.myFunction = function(var1, var2, cb){

    var URL = "http://....//";

    this.makeRequest(URL)
        .then(function(data)
        {
            //Some processing logic
            cb(null,data);
        })
        .catch(function(err)
        {
            cb(err,null);
        })
}

module.exports = MyModule;

然后要使用这个模块,我想执行以下操作...

 var MyModule = new(require('../lib/MyModule'));

 MyModule.myFunction(var1,var2)
            .then(function(data)
            {
                console.log(data);
            }).catch(function(err){
                console.log(err);
            });

如何使用 BlueBird 实现此功能?我一直在尝试这样的 PromisifyAll()..

var MyModule = new(require('../lib/MyModule'));
var Promise = require("bluebird");
var MyModuleAsync = Promise.promisifyAll(MyModule);

我的方法显然是不正确的,我知道我可以在 API 中手动创建和返回承诺,但文档建议我不需要这样做。

【问题讨论】:

  • 嗯,看起来MyModule.prototype.myFunction 已经在内部使用了 Promise。你真的应该修复那个库,让它返回它们而不是回调。
  • @bergi - 它使用一个返回承诺的库(request-promise),但在将数据传回之前我需要做一些额外的处理。我见过的所有文档都说你真的应该返回一个承诺并只使用 Bluebird 的 Promisify 功能?
  • 如果您必须进行额外处理,请在 promise then 回调中执行并返回结果 promise。不要退回到常规回调。这基本上是promise construction antipattern 在两个模块之间延伸并使用promisify 隐藏。
  • 我明白了 - 很棒的链接!好的很酷,将看看转换它。谢谢你

标签: node.js promise bluebird


【解决方案1】:

从承诺单一功能开始

var MyModule = new(require('../lib/MyModule'));
var Promise = require("bluebird");
var MyModuleAsync = Promise.promisify(MyModule.myFunction, MyModule);

MyModuleAsync(var1, var2).then(function(res){
  // etc
});

一旦你开始工作,你就可以开始考虑实施promisifyAll()

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 2015-02-05
    • 2015-07-18
    • 2016-05-21
    • 2014-08-20
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多