Javascript 为什么node.js/bluebird会吃到一个异常?

Javascript 为什么node.js/bluebird会吃到一个异常?,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,在我的承诺堆深处,我打电话: function isNameAvailable(name) { return registry.getName(name) .then(function(result) { return result ? false : true; }); } 不幸的是,这是一个编程错误,注册表未定义。我的node.js应用程序没有打印任何错误消息。你知道为什么吗?我正在使用蓝鸟承诺图书馆 编辑 这是电话号码。我只

在我的承诺堆深处,我打电话:

function isNameAvailable(name) {
    return registry.getName(name)
        .then(function(result) {
            return result ? false : true;
        });
}
不幸的是,这是一个编程错误,注册表未定义。我的node.js应用程序没有打印任何错误消息。你知道为什么吗?我正在使用蓝鸟承诺图书馆

编辑

这是电话号码。我只是加了一个陷阱,但什么都没有

function _checkAvailability(name) {
    return isNameAvailable(name)
        .then(function(isAvailabile) {
            if (isAvailabile) {
                return true;
            }
            else {
                throw new NameNotAvailable('Name "' + name + '" is not available');
            }
        })
        .catch(function(error) {
            console.log('isNameAvailable threw', error);
            throw error;
        })
}
堆栈最终应回滚到express.js因HTTP请求而调用的函数。这是一个我捕获所有错误并打印堆栈跟踪的地方(但显然它没有打印任何内容):


编辑以反映您的更新:

Naresh是对的,您需要返回一个被拒绝的承诺,如果它抛出的话,它的名称是可用的。你可以试试

  function isNameAvailable(name) {
    try {
      return registry.getName(name)
        .then(function(result) {
          return result ? false : true;
        });
    } catch(e){
      return Promise.reject(e)
    }
  }
看到这篇文章,你会发现深深承诺中的错误


您打电话到哪里了
isnameavable
?它确实抛出了。你能分享更多你的代码吗?从这一点上,我想问题在于您没有捕获错误。请查看我对该代码调用方的编辑。
isnameavable
会同步
抛出一个异常。这不会在返回值的任何
.catch()
处理程序中被捕获,因为您不会返回被拒绝的承诺-永远不会执行
catch
方法。如果您执行类似于
somePromise.then(isnameavable)
(或
)的操作,则会捕获错误并将其转换为拒绝。然后(\u checkAvailability)
)好的,这是有意义的。因此,基本问题是由于编程错误,
isnameavable
没有返回承诺,因此我们不能期望
then
catch
起作用。看来我根本不应该更改代码,而应该确保我能够调试这些问题。
  function isNameAvailable(name) {
    try {
      return registry.getName(name)
        .then(function(result) {
          return result ? false : true;
        });
    } catch(e){
      return Promise.reject(e)
    }
  }