我正在努力扩展我的知识(初学者阶段)。基本上,我想使用promises向我的用户写新的电子邮件。我在我的游戏项目中有一些代码库,但我的功能并没有停止。 这是应该写入Database的函数:
changeEmailAddress(user, "hello@there.com").then(function () {
//it never comes in here :(
})
如果我没弄错的话,我应该如何使用它:
<script src="https://www.gstatic.com/firebasejs/4.0.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.0.0/firebase-database.js"></script>
我有类似的功能处理用户,但我的功能没有进入&#39;然后&#39;
答案 0 :(得分:5)
您正在提交explicit promise constructor anti-pattern。您的代码不需要比
复杂changeEmailAddress(user, newEmail) {
user.setEmail(newEmail);
return userRepository.saveUser(user);
}
当然要确保不要忘记return
!
答案 1 :(得分:-2)
你的函数changeEmailAddress什么都不返回,这是
的原因changeEmailAddress(user, newEmail) {
let promise = new Promise((resolve, reject) => {
user.setEmail(newEmail);
userRepository.saveUser(user).then(() => {
return resolve();
}).catch(e => {
return reject(e);
});
});
return promise;
}
答案 2 :(得分:-2)
你没有归还新的承诺。
changeEmailAddress(user, newEmail) {
return new Promise((resolve, reject) => {
user.setEmail(newEmail);
userRepository.saveUser(user).then(() => {
resolve();
}).catch(e => {
reject(e);
});
});
}
您可能还有未经处理的拒绝。
changeEmailAddress(user, "hello@there.com").then(function () {
//it never comes in here :(
}).catch(function(e) {
console.log(e); // Does this happen?
})
编辑:你的changeEmailAddress使用反模式(参见@ torazburo的回答)。虽然这个答案有效,但您应该只返回saveUser promise,除非您想直接使用它的结果。