Javascript 如何用蓝鸟来包装承诺

Javascript 如何用蓝鸟来包装承诺,javascript,promise,bluebird,Javascript,Promise,Bluebird,我使用bluebird表示承诺,但也使用一个返回非bluebird承诺的库。我想使用.asCallback。我尝试使用Promise.resolve来包装它,我在网上的其他地方找到了它,但它隐藏了Promise链中的错误。在代码中,如果我取出then/catch,它将解析而不是抛出客户端调用中的错误,即使发生了错误 除了使用新承诺(解析、拒绝)创建新承诺(这是一个显而易见的解决方案)之外,还有没有更好的方法将其转换为蓝鸟承诺,将任何错误传播到原始承诺链 module.exports.count

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

除了使用
新承诺(解析、拒绝)
创建新承诺(这是一个显而易见的解决方案)之外,还有没有更好的方法将其转换为蓝鸟承诺,将任何错误传播到原始承诺链

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);

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);
}

“它隐藏了承诺链中的错误”是什么意思<代码>承诺。解决当然不会这样做。但是,您的
catch()
调用可能会失败。可能是父承诺链中的其他内容。我添加catch只是为了解决问题,所以我的代码示例实际上很糟糕。让我再检查一下。我想这只是我在父链处理程序中的一个错误。我还在学习如何正确使用承诺。。。