Javascript Restify返回未定义的函数不是错误对象中的函数
我有一个下面的Restify自定义错误,它被抛出到我的BlueBird Promise捕获块中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
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);
});