ค้นหาเว็บไซต์

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);

บทความที่เกี่ยวข้อง