NodeJS: Promise.all() не ждет, пока ведро S3 завершит выполнение

Чтобы загрузить файл в ведро S3, мне удалось использовать следующую функцию.

      
public async uploadFile() {
  try {
    return new Promise(async (resolve) => { 
      const resolution = [
        { key: 'thumbnail', value: { height: 256, width: 256 }},
        { key: 'small', value: { height: 72, width: 72 }},
      ]
      resolution.forEach(size => {
        Sharp(buffer)
        .resize(size.value).toBuffer()
        .then(async data => {
          var object = {
            Body: data,
            Bucket: ENV.BUCKET_NAME,
            Key: `${size.key}/${imglabel}/${keys}.${fileExt}`,
            ServerSideEncryption: "AES256",
          };
          bulkOfBody.push(object)
          responses = await Promise.all(
            bulkOfBody.map(param => s3.upload(param).promise())
          )
          if (responses.length === 2) {
            resolve(responses);
          }
        })
      })
    })
  } catch (error) {
    throw error;
  }
}

Теперь, после того, как S3 завершит процесс загрузки, мне нужно обработать его ответ, но хотя я справился с этим методом; Я не могу справиться с ответом. И текущий сценарий таков, что Promise.all() вернуть undefined ответ, не дожидаясь завершения выполнения S3.

      public async processProductImage(images) { 
  let uploadImagetoS3 = images.map(async (ele) => {
    return new Promise(async (resolve, reject) => {
      const productImageObj = ele;
      
      await productImageRepo.uploadFile().then(async (response: any) => {
        // doing the process to store image URL into DB after getting response from S3 bucket object 
        response.forEach(obj => {
          storeImage.push(obj.Location)
        })
      }
    })
  })
  })

  Promise.all(uploadImagetoS3).then((response) => {
    console.log("response - ", response); // it logs after Promise.all() executed. 
    return 'Success';
  })
}

Наконец, отправка этого ответа в контроллер, который будет отвечать за отправку ответа в API, но, к сожалению, постоянно получать неопределенный ответ.

      public async setProductImages(req: Request, res: Response, next: NextFunction) {
  try{
    let imagesExecution = _campaignProducts.map(async productID => {
      return new Promise(async (resolve, reject) => {
        await axios({ method: 'get', url: `${ENV.API_ENDPOINT}/?id=${id}` })
        .then(async res => {
          await repository.processProductImage(productImages).then((imageres) => {
            resolve(imageres)
          });
        })
      })
    })

    Promise.all(imagesExecution).then(async (response) => {
      console.log(response)
      res.status(200).json({ "data": response })
    })
  }
}

PS: Я тоже проверил этот ответ, но не смог обработать ответ после того, как S3 завершит его выполнение. https://stackoverflow.com/a/66404490/5624578

0 ответов

Другие вопросы по тегам