我收到此错误消息时使用下面的代码段
Unhandled rejection Error: reply interface called twice
请注意,我正在将return
用于所有的回复()界面
Locations
.findOne({
_id: request.params.id,
activationCode: payload.activationCode
}).then((location) => {
if (!location) {
return reply(Boom.notFound('Location not found'))
}
locationObject = location
if (payload.password !== payload.confirmPassword) {
return reply(Boom.badRequest('Password and Confirm Password must match'))
}
if (!payload.terms) {
return reply(Boom.badRequest('Must agree to Terms & Conditions'))
}
return newPaymentMethod.save()
}).then((paymentMethod) => {
.....
return user.save() // user is defined at .....
}).then(() => {
return reply({ token: helpers.createJwt(userObject) })
}).catch((err) => {
return reply(Boom.wrap(err))
})
任何帮助都将不胜感激。
答案 0 :(得分:3)
由于未正确使用承诺,您似乎陷入了困境。我猜你正在一个你可以访问reply
的路由处理程序中执行你的代码片段。
当您在承诺链中return
回复时,您return
将.then
的价值转移到下一个reply
(承诺)并同时调用reject
来自外部范围。
我建议您使用承诺reply(Boom.method())
来处理错误,这样您只需要承诺.catch()
中的ELSE
个。{/ p>
答案 1 :(得分:1)
因为你最终链接了承诺
.then(() => {
return reply({ token: helpers.createJwt(userObject) })
}).catch((err) => {
return reply(Boom.wrap(err))
})
如果任何reply
条件为真,您可以拨打if
两次。
简单的解决方案是在if
条件中抛出错误为真 - 因为catch块中已经存在Boom.wrap
。