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

Restify returns undefined is not a function in error object

我有一个下面的 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 块下的上述调用函数是有原因的吗?

问题不在于 Restify,而在于您的 test 函数。您正在调用 test().catch,但 test() 没有 return 任何东西——即它 returns undefined。您实质上是在调用 undefined.catch,它不存在。

如果你想在 test 的结果上调用 catch,它需要 return 一个承诺。

我找到了答案。 respObject.toJSON() 导致 undefined is not a function 因为 respObject 没有 toJSON() 功能:)