gpt4 book ai didi

javascript - 在完成循环之前 promise 拒绝

转载 作者:行者123 更新时间:2023-11-30 13:57:04 24 4
gpt4 key购买 nike

这可能是一个简单的修复方法,但我在使用带有 Promise 的循环时遇到了问题。我正在使用 Angular 和 Typescript。

作为背景故事,我正在尝试实现一个非常简单的用户身份验证登录页面。我有一个用户对象数组,每个对象都包含用户名、密码等。在登录页面上,当用户输入他们的用户名/密码时,单击“登录”按钮,将触发一个 promise 函数,它循环遍历数组以查看如果数组与用户输入匹配。

这是我写的一些伪代码,其中 usersList 是用户数组,users.usernameusers.password 是用户输入。

for (var i = 0; i < this.usersList.length; i++) {
if (this.usersList[i].email === user.username && this.usersList[i].password === user.password) {
resolve({
/* code */
})
} else {
reject({
message: "User/Password not found"
})
}

但是,这仅适用于列表中的第一个对象,因为 Promise 在 for 循环的第一次迭代中拒绝。我该如何继续解决这个问题,以便它仅在循环遍历数组中的每个对象后才拒绝?

最佳答案

明显的问题是您在检查了一项并发现与输入不匹配时立即调用 reject。循环确实会继续,但到那时再解决 已经太晚了。

一个更好的主意可能是过滤您的 users 列表以查看该项目是否存在,如果存在,则 resolve 否则 reject。像这样的东西:

var foundItems = this.usersList.filter(u => u.username == user.username && u.password == user.password);
if(foundItems.length){
resolve({
/* code */
});
}
else{
reject({
message: "User/Password not found"
});
}

你也可以使用 find 来达到类似的效果:

var user = this.usersList.find(u => u.username == user.username && u.password == user.password);
if(user){
resolve({
/* code */
});
}
else{
reject({
message: "User/Password not found"
});
}

关于javascript - 在完成循环之前 promise 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com