Javascript Restify返回未定义的函数不是错误对象中的函数

Javascript Restify返回未定义的函数不是错误对象中的函数,javascript,node.js,bluebird,restify,Javascript,Node.js,Bluebird,Restify,我有一个下面的Restify自定义错误,它被抛出到我的BlueBird Promise捕获块中 var test = function() { respObject = { hello: { world: 'aasas' } }; throw new restify.errors.ServiceError(respObject, 422); } 然后在ServiceError中: function ServiceError(respObject, statusCode) { re

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

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()
的函数时:


它返回的
未定义不是函数
。有没有理由不将
err
对象返回到catch块下的上述调用函数中?

问题不在于Restify,而在于您的
test
函数。您正在调用
test().catch
,但
test()
不返回任何内容,即它返回
未定义的
。实际上,您正在调用不存在的
undefined.catch


如果你想根据
测试的结果调用
catch
,它需要返回一个承诺。

我找到了答案。是
respObject.toJSON()
导致
undefined不是一个函数
,因为
respObject
没有
toJSON()
函数:)

如果在
test
中抛出新错误('test')
,会发生什么?它工作正常吗?我不明白如何才能得到
未定义的不是一个函数。@AndreyPopov如果我去
抛出新的错误('test')
我得到的是正确的错误对象。只是因为Restify自定义错误似乎不起作用,我不知道这是否正确。它抛出一个异常,该异常应该在catch块上结束。即使您在异常之后返回,它也永远不会结束,因为您没有
catch
块。这看起来是这样的:
try{test();}catch(err){console.log(err);}
您试图调用一个名为
catch
的函数,但您没有返回一个具有
catch
函数的对象。@Jordan那么我需要在测试函数之后或之前返回吗?这很难回答,因为您还没有展示如何实际使用此代码。您说您正在使用Bluebird promises,但您的问题中没有任何实际的promise代码,并且不清楚您实际要解决的问题。您确定您正在按预期使用Restify吗?浏览文档时,他们从不抛出
,而是调用
下一步(新错误…
)。
test().catch(function(err) {
  console.log(err);
});