Async / await - данные не определены - PullRequest
3 голосов
/ 14 февраля 2020

Попытка преобразовать CSV в JSON, затем загрузить изображение, затем загрузить его в корзину S3, затем обновить текущий JSON и, наконец, сгенерировать новый CSV. Однако код не ожидает завершения асинхронной функции c, поэтому const data = await handle_image_URLs(csv); возвращается как undefined .

//parse CSV - extract images, then upload to S3 bucket
const handle_image_URLs = file => {
  new Promise((resolve, reject) => {
    fs.createReadStream(file)
      .pipe(csv_to_json())
      .on("data", async data => {
        // console.log("data", data);
        try {
          if (is_image_url(data.image_link)) {
            console.log("data.image_link", data.image_link);
            image_buffer = await download_image(data.image_link);
            name = uuid() + ".jpg";
            const location = await upload_to_S3(image_buffer, name);
            //Inject back updated image url
            data.image_link = location.Location;
            //New generated data goes into an array
            results.push(data);
          }
          // console.log("RESULT", results);
          resolve(results);
        } catch (error) {
          reject(error);
        }
      });
  });
};

express для обработки загрузки CSV

app.post("/", upload.single("file"), async (req, res) => {
  const file = req.file;
  const csv = `./uploads/${file.originalname}`;
  const data = await handle_image_URLs(csv);
  console.log("DATA", data);
  // await json_to_csv_converter.json2csv(data, json2csvCallback);
  res.status(200).json({ message: "working " });
});

1 Ответ

1 голос
/ 14 февраля 2020

Обновите return new promise((resolve, reject)) до return new promise( async (resolve, reject)), и оно должно работать

...