如何用蓝鸟包裹一个承诺

时间:2017-02-02 02:31:04

标签: javascript promise bluebird

我使用bluebird作为承诺,但也使用了一个返回非蓝鸟承诺的库。我想使用.asCallback。我尝试使用Promise.resolve来包装它,我在其他地方找到了它,但它隐藏了promise链中的错误。在代码中,如果我取出then/catch它解析而不是从客户端调用中抛出错误,即使发生了错误。

除了使用new Promise(resolve,reject)创建一个新的承诺,这是一个明显的解决方案,是否有更好的方法将其转换为蓝鸟承诺,将任何错误传播到原始承诺链?

module.exports.count = function(params, done){
  var promise = client.count({
    "index": config.search.index + "_" + params.index
  }).then(function(response){
    logger.debug(response);
  }).catch(function(e){
    logger.error(e);
  });
  return Promise.resolve(promise).asCallback(done);

1 个答案:

答案 0 :(得分:1)

Promise.resolve 传播错误。您的问题似乎是catch在他们到达resolve之前处理它们。你应该做的

function count(params, done){
  return Promise.resolve(client.count({
    "index": config.search.index + "_" + params.index
  })).then(function(response){
    logger.debug(response);
    return response; // important!
  }, function(e){
    logger.error(e);
    throw e; // important!
  }).asCallback(done);
}