javascript - 无法访问 for 循环中使用的链式 Promise 内的外部范围变量
问题描述
我需要在async/await
里面做for..loop
,但那样我不能做并行操作。
因此,我将这些承诺推入一个变量,promises
稍后我将promise.all()
对其进行处理。
这是我的代码。
const promises = [];
for (let i = 0; i < todayAssignedJobs.length; i += 1) {
promises.push(Leaderboard.findOrCreate({...}).then((leaderboard, created) => {
if (!created) {
const rating = (todayAssignedJobs[i].rating + leaderboard.rating * leaderboard.jobs_completed) / (leaderboard.jobs_completed + 1);
const commission = todayAssignedJobs[i].commission + leaderboard.commission;
const jobsCompleted = leaderboard.jobs_completed + 1;
Leaderboard.update({
rating,
commission,
jobs_completed: jobsCompleted,
updated_by: 'system',
}, {
where: {
id: leaderboard.id,
},
});
}
AssignedJob.update({
is_leaderboard_generated: true,
}, {
where: {
id: todayAssignedJobs[i].id,
},
});
}));
}
await Promise.all(promises)
Assigned.update({..}, { where: { id: todayAssignedJobs[i].id }})
不知何故,当我遇到错误时,我无法获得 id :
未处理的拒绝错误:WHERE 参数“id”具有无效的“未定义”值
有人可以解释发生了什么吗?另外,请建议我可以在下面做吗?
promises.push(async () => { // I will use await here })
解决方案
问题是findOrCreate()
返回一个包含两个值的数组,我在这里[ {...}, boolean ]
传递它们总是和一个.
我进行了更改,现在它工作正常。(leaderboard, created)
created
undefined
leaderboard
array
const promises = todayAssignedJobs.map((todayAssigned) => Leaderboard.findOrCreate({...}).then(([leaderboard, created]) => {
if (!created) {
const rating = (todayAssigned.rating + leaderboard.rating * leaderboard.jobs_completed) / (leaderboard.jobs_completed + 1);
const commission = todayAssigned.commission + leaderboard.commission;
const jobsCompleted = leaderboard.jobs_completed + 1;
Leaderboard.update({
rating,
commission,
jobs_completed: jobsCompleted,
updated_by: 'system',
}, {
where: {
id: leaderboard.id,
},
});
}
AssignedJob.update({
is_leaderboard_generated: true,
}, {
where: {
id: todayAssigned.id,
},
});
}));
await Promise.all(promises);
推荐阅读
- flutter - 在 _CustomNavigatorState 中找不到路由 RouteSettings("/pomodoro", null) 的生成器
- java - 将第二个 .p12 导入密钥库后的 handshake_failure 和 UNKNOWN_CA
- swift - Flutter Desktop:Firebase Auth 找不到有效的 GoogleService-Info.plist
- python - 使用 make 和 Makefiles 从包含空格的文件路径中处理原始源数据
- c# - C# MongoDb - 如何更新嵌套文档中的一个字段?
- python - 计算分组数据帧的匹配计数频率和准确性
- flutter - 如何在有状态小部件中添加添加实现 PreferredSizeWidget
- android - 我们可以控制安卓手机的电源按钮吗?
- javascript - 在 WebStorm ESLint 中获取 ESLint 错误:在导入的模块中解析错误
- reactjs - 反应路由问题重定向