Restify返回undefined不是错误对象中的函数

时间:2015-05-29 13:04:37

标签: javascript node.js bluebird restify

我有一个下面的Restify自定义错误,它被抛到我的BlueBird Promise的catch块中。

var test = function() {
  respObject = { hello: { world: 'aasas' } }; 
  throw new restify.errors.ServiceError(respObject, 422);
}

然后在ServiceError中:

function ServiceError(respObject, statusCode) {
  restify.RestError.call(this, {
    restCode: 'ApiError',
    statusCode, statusCode,
    message: 'Api Error Occurred',
    constructorOpt: ServiceError,
    body: {
      message: 'Api Error Occurrede',
      errors: respObject.toJSON()
    }
  });

  this.name = 'CustomApiError';
}

util.inherits(ServiceError, restify.RestError);
restify.errors.ServiceError = ServiceError;

然而,在test()的调用函数:

test().catch(function(err) {
  console.log(err);
});

它正在返回undefined is not a function。是否有理由不将err对象返回到catch块下面的上述调用函数?

2 个答案:

答案 0 :(得分:3)

问题不在于Restify,而在于test功能。您正在呼叫test().catch,但test()不会返回任何内容 - 即。它返回undefined。你实际上是在调用undefined.catch,但这不存在。

如果您想在catch的结果上调用test,则需要返回一个承诺。

答案 1 :(得分:0)

我找到了答案。由于respObject.toJSON()没有undefined is not a function功能导致respObject导致toJSON():{/ p>