[英]Array of numbers gets converted to an array of key-value pairs;
我在Angular4應用中創建了此函數:
enrollmentCheck() {
this.allCourses.forEach(course => {
this._courses.getCurrentEnrolment(course.slug).subscribe(res => {
if(res.length > 0){
this.enrolledCourses.push(res[0].course_id);
console.log(this.enrolledCourses);
}
})
});
console.log(this.enrolledCourses);
}
它應該遍歷對象數組,並檢查用戶是否已注冊其中的任何對象。
第一位工作得很好,訂閱給了我正確的數據(分辨率)。 然后,我需要將Course_id屬性存儲到數組中。
第一個日志(在循環內)似乎工作正常。 我懂了
[1]
[1,2]
[1,2,5]
[1,2,5,7]
作為輸出,每次循環執行一次。
問題是第二個日志(循環外)將輸出類似以下內容的內容:
[
0: 1
1: 2
2: 5
3: 7
]
而不是
[1,2,5,7]
如我所願,因為我將需要遍歷此數組,而我找不到找到處理該數組的方法。
有人可以幫忙嗎? 對於某人來說這似乎是一個愚蠢的問題,我深表歉意,但任何幫助將不勝感激。
謝謝,M
您的方法存在一些問題。 首先,您要在循環內創建訂閱,這是個壞主意,因為您永遠不會完成訂閱。 其次,您正在循環內執行asyc操作,因此,在第二個控制台日志出現時,數據可能還不存在。
更好的解決方案是使用Observable.forkJoin
等待所有異步請求,然后映射數據。
例如
enrollmentCheck() {
Observable.forkJoin(
this.allCourses.map(course => {
return this._courses.getCurrentEnrollment(course.slug);
}
).map(res => {
return res
.filter(enrollment => enrollment.length > 0)
.map(enrollment => enrollment[0].course_id)
}).subscribe(data => console.log(data))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.