Javascript - 代码不会停止在那时

时间:2017-05-31 09:27:15

标签: javascript promise

我正在努力扩展我的知识(初学者阶段)。基本上,我想使用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;

3 个答案:

答案 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,除非您想直接使用它的结果。