Nev*_*sis 7 javascript promise reactjs
我知道这个问题很平常.我正在使用es6 promises,而且我有多个层.在运行时,当我没有收到承诺时,我Uncaught (in promise)在控制台中.但事实是我在代码中的确低了.
快速简化的例子:
LoginApi.js
var loginDaoCall = loginDao.login(username, password);
loginDaoCall
.then(function (res) {
store.dispatch(loginSuccess());
log.log("[loginApi.login] END");
})
.catch(function (err) {
store.dispatch(loginFail());
errorUtils.dispatchErrorWithTimeout(errorLogin);
log.log(err);
});
return loginDaoCall;
Run Code Online (Sandbox Code Playgroud)
loginContainer.js
loginApi.login(user, password).then(() => {
// Change here instead of in render so the user can go back to login page
this.props.history.push(baseUrlRouter + "test");
}); // <- Error here cause I don't CATCH the promise, but I do catch it in my loginapi.js
Run Code Online (Sandbox Code Playgroud)
我知道我什么也做不了,但是呃.我也可以在我的API层执行历史推送工作,但这不是它的责任.
如何避免控制台中的错误?有办法吗?我甚至想把它留下来.
你的问题是你正在return处理被拒绝的loginDaoCall,而不是已经处理错误的承诺。loginApi.login(user, password)确实返回了一个被拒绝的承诺,即使在另一个分支中处理了这个承诺,进一步返回的承诺.then()也被拒绝并且没有被处理。
你可能想做类似的事情
// LoginApi.js
return loginDao.login(username, password).then(function (res) {
store.dispatch(loginSuccess());
log.log("[loginApi.login] END");
return true;
}, function (err) {
store.dispatch(loginFail());
errorUtils.dispatchErrorWithTimeout(errorLogin);
log.log(err);
return false;
}); // never supposed to reject
Run Code Online (Sandbox Code Playgroud)
// loginContainer.js
loginApi.login(user, password).then(success => {
if (success) {
// Change here instead of in render so the user can go back to login page
this.props.history.push(baseUrlRouter + "test");
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9115 次 |
| 最近记录: |