我正在使用护照库来帮助我进行用户注册。当我经历几个异步步骤时,我也使用'Q'诺言库来避免厄运的金字塔。
一切正常,直到我从其中一个承诺的步骤中抛出错误。我原本假设执行会进入.fail
函数,在那里我可以处理错误并退出护照并注册失败。但由于我不理解的原因,.fail
函数永远不会被调用。相反,我只是在浏览器窗口和控制台中获得了一个stackdump。
控制代码在这里:
q.fcall(checkEmailIsFree({'email':email, 'username':username, 'password':password}))
.then(checkUsernameIsFree)
.then(registerUser)
.then(function (user) {
if (user) {
logDebug('REGISTERED: ' + email);
return done(null, user);
}
else {
logDebug('Could not register');
return done(null, false);
}
})
.fail(function (err) {
logError('I never get here');
return done(null, false);
})
.done();
这就是我在checkEmailIsFree
var error = new Error('Bad times. Email is in use: ' + email);
throw error;
是否有某些整体快递/节点代码设置为以某种方式快速转储异常?为什么不叫我的捕获?我错过了什么?
答案 0 :(得分:1)
我认为done(onFulfilled, onRejected, onProgress)
在这种情况下可以提供帮助。你可以尝试:
q.fcall(checkEmailIsFree({'email':email, 'username':username, 'password':password}))
.then(checkUsernameIsFree)
.then(registerUser)
.then(function (user) {
if (user) {
logDebug('REGISTERED: ' + email);
return done(null, user);
}
else {
logDebug('Could not register');
return done(null, false);
}
})
.done(undefined, function (err) {
logError('Error!'); // used in case of reject
return done(null, false);
});