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”。是吗?这将是一个很大的提示,说明出了什么问题。避免!