javascript - Promise 并不总是从 Web 服务中获取所有值
问题描述
this.batGradesProvider.getAllCourseIds()
我正在使用我创建的多个 Web 服务 ( && provider.getCoursesGrades
)使用承诺来填充数组,但我并不总是从我的 Web 服务中获取所有值。例如,对于我的一个测试用例,我知道我有一组 6 个课程成绩,但最后我只收到 2 个。我的承诺或 forEach 是否做错了什么?提前致谢。
const promise = this.batGradesProvider.getAllCourseIds();
promise.then((courseIds) => {
courseIds.forEach((courseId) => {
const promise2 = provider.getCoursesGrades(siteId, courseId, userid);
promise2.then((data) => {
for (let i = 0; i < data.data.length; i++) {
// Get this course
const activity = data.data[i];
const activityObj: Activity = {
courseName: activity.courseName,
courseId: courseId,
name: activity.name,
status: activity.status,
complete: activity.complete,
score: activity.grade,
hasPassed: activity.hasPassed,
user: activity.username,
email: activity.useremail,
activityName: activity.activityname,
activityId: activity.activityid
};
// Add course to our running data
this.batGradesTable.push(activityObj);
}
return this.batGradesTable;
});
});
})
解决方案
您正在尝试在 a 中执行承诺forEach
,但 forEach 函数不知道它应该等待承诺完成。Promise.all
当你想要执行许多 Promise 时,你可能想熟悉一下。
尝试这样的事情:
this.batGradesProvider.getAllCourseIds().then((courseIds) => {
return Promise.all(courseIds.map((courseId) => {
return provider.getCoursesGrades(siteId, courseId, userid);
}).then((results) => {
this.batGradesTable = [];
results.forEach((data) => {
for (let i = 0; i < data.data.length; i++) {
const activity = data.data[i];
const activityObj = { /* ... */ };
this.batGradesTable.push(activityObject);
}
});
return this.batGradesTable;
});
});
推荐阅读
- assembly - 如何用汇编语言打印出两个变量?
- artifactory - 带竹子的神器许可证管理器
- flutter - 调用 SetState() 时如何避免具有 UniqueKey 闪烁的 Flutter FutureBuilder?
- python - 删除 Jinja 模板中的缩进
- python-3.x - 通过网络抓取从使用 ajax 制作的图形中获取文本
- java - 有没有办法知道过期的保险库客户端令牌?
- .net - 设备未准备好。(新-PSSession)
- reactjs - 无法获取数字以填写井字游戏示例
- java - Android:tflite.runForMultipleInputsOutputs 返回 NaN
- ios - iOS 14 小部件在实时应用程序上显示为黑色