angular - พรอมิสในลูป foreach (Typescript 2)
ฉันติดอยู่กับสายพรอมิสอยู่ ฉันจำเป็นต้องดำเนินการโค้ดบางส่วนหลังจากอัปโหลดรูปภาพไปยังเซิร์ฟเวอร์ มันคือ Angular2 และ Typescript มาลองเขียนโค้ดจำลองกัน:
uploadImages(images):Promise<any> {
return new Promise((resolve, reject) => {
for (let image of images) {
upload(image.type_1).on('upload_completed', (data) => {
// do something
})
upload(image.type_2).on('upload_completed', (data) => {
// do something
})
}
}
uploadImages(images).then(doSomethingElse);
ผมทำงานชิ้นนี้ในบางวิธีแบบนี้ แต่ผมสับสนเล็กน้อยกับ promise chains ผมไม่สามารถหาวิธีเชื่อมการอัปโหลดรูปภาพเหล่านี้ในลูป foreach และคืนผลใน promise ใหม่เมื่อการอัปโหลดทั้งหมดเสร็จสิ้น วิธีที่ถูกต้องในการทำสิ่งนี้คืออะไร?
แก้ไข: มี callback ที่อิงตาม event ในลูป จะเปลี่ยนเป็น promises เพื่อใช้กับ Promise.all() อย่างไร?
คำตอบ #1
uploadImages(images):Promise<any> {
let promises_array:Array<any> = [];
for (let image of images) {
promises_array.push(new Promise(function(resolve,reject) {
upload(image.type_1).on('upload_completed', (data) => {
resolve(true);
})
}));
promises_array.push(new Promise(function(resolve,reject) {
upload(image.type_2).on('upload_completed', (data) => {
resolve(true);
})
}));
return Promise.all(promises_array);
}
uploadImages(images).then(doSomethingElse);
