为什么node.js / bluebird会出现异常?

时间:2015-11-07 14:03:01

标签: javascript node.js bluebird

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

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

堆栈最终应该回滚到由HTTP请求导致的express.js调用的函数。这是我抓住所有错误并打印堆栈跟踪的地方(但显然它不打印任何东西):

function createUser(req, res) {
    userService.createUser(req.body)
        .then(function(user) {
            res.status(201).send(user);
        })
        .catch(function(error) {
            log.trace(error);
            res.status(500).send({'message': error.toString()});
        });
}

1 个答案:

答案 0 :(得分:0)

已编辑以反映您的更新:

Naresh是对的,如果它被抛出,你需要从名称中返回被拒绝的承诺。你可以试试

  function isNameAvailable(name) {
    try {
      return registry.getName(name)
        .then(function(result) {
          return result ? false : true;
        });
    } catch(e){
      return Promise.reject(e)
    }
  }

请参阅此文章,了解深陷承诺中的错误吞咽情况。

http://www.mattgreer.org/articles/promises-in-wicked-detail/#promises-can-swallow-errors-