Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-代码没有停止,然后_Javascript_Promise - Fatal编程技术网

Javascript-代码没有停止,然后

Javascript-代码没有停止,然后,javascript,promise,Javascript,Promise,我正在努力扩展我的知识(初级阶段)。基本上,我想用承诺来写新的电子邮件给我的用户。我的游乐场项目中有一些代码库,但我的功能并没有停止。 这是应该写入数据库的函数: changeEmailAddress(user, newEmail) { new Promise((resolve, reject) => { user.setEmail(newEmail); userRepository.saveUser(user).then(()

我正在努力扩展我的知识(初级阶段)。基本上,我想用承诺来写新的电子邮件给我的用户。我的游乐场项目中有一些代码库,但我的功能并没有停止。 这是应该写入数据库的函数:

changeEmailAddress(user, newEmail) {
       new Promise((resolve, reject) => {
            user.setEmail(newEmail);
            userRepository.saveUser(user).then(() => {
                return resolve();
            }).catch(e => {
                return reject(e);
            });
        }
    );
}
如果我没有弄错的话,我应该这样使用它:

changeEmailAddress(user, "hello@there.com").then(function () {

    //it never comes in here :(
})

我在用户身上使用了类似的函数,但我的函数没有进入“then”

您的函数更改EmailAddress不会返回任何内容,这就是为什么

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;
}

你不会回报新的承诺

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承诺。

您正在提交。您的代码不需要比

changeEmailAddress(user, newEmail) {
  user.setEmail(newEmail);
  return userRepository.saveUser(user);
}

当然,要确保不要忘记
返回值

我还没有测试,就到此为止。这个答案,包括问题中的代码,正在实现torazaburo在回答中提到的反模式;他的答案应该被标记为一个答案,不鼓励使用反模式。如果这是您的实际代码,那么
changemailaddress(…)。然后(
部分应该生成一个运行时错误,例如“undefined.then't a function”。是吗?这将是一个很大的提示,说明出了什么问题。避免!