如何宣传?

时间:2014-10-08 09:56:52

标签: javascript promise bluebird

我有这种功能:

someFunction.someMethod('param1', function(err, res1, res2) {
  req.method(res1, function(err) {
    if (!err) {
      console.log('Yes!');
    }
  });
})(req, res); // <-- This one's the problem!

现在当我试图宣传它时:

var a = Promise.promisify(someFunction.someMethod);

a('param1').spread(function(res1, res2) {
  console.log('Yes!');
}).catch(function(err) {

});

它不再起作用,因为我无法将(req, res)放在它的末尾。怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

我会试试这个:

var a = Promise.promisify(function(arg, cb) {
    someFunction.someMethod(arg, cb)(req, res);
});

a('param1').spread(function(res1, res2) {
  console.log('Yes!');
}).catch(function(err) {

});

......是的,它很难看。但是,这个部分应用程序可能表示someFunction.someMethod('param1', …)返回的函数应该被多次调用;并且您的回调将被多次调用 - 您不能再使用承诺了。