не может прочитать данные из файла после получения данных из s3 и записи в файл - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить данные из файла из корзины s3 и записать их во временный файл, а затем прочитать данные из этого временного файла.Файл был успешно создан, и данные, представляющие собой некоторый html, показанный во временном файле, но когда я пытаюсь console.log на следующем шаге, он возвращает пустой.

 try {   
    ...
    const params = {Bucket: "somebucket", Key: "file.html"}
    let tempFile = fs.createWriteStream("./temp/file.html", 'utf8')
    s3.getObject(params).createReadStream().pipe(tempFile)

    fs.readFile('./temp/file.html', 'utf8', (err, data) => {
        if (err) console.log(err)
        else {
           console.log("cannot get data?") //this shows up
           console.log(data) // this one does not shows up
        }
    })
    ...
} catch {
  ...
}

Кто-нибудь имеет опыт в этом?

Обновление:

Я понимаю, что данные находятся внутри файла и могут нормально выводиться без части getObject (), но данные не могут быть отображены.Это может быть связано с тем, что файл читается до того, как данные полностью вставлены в файл.Как я должен изменить код, чтобы я мог отложить выполнение readFile после завершения вставки данных в файл.Я попробовал setTimeout, но не смог.

1 Ответ

0 голосов
/ 20 марта 2019

Скорее всего, это проблема, вызванная асинхронной природой nodejs.Ваши вызовы функций (s3.getObject и fs.readFile) выполняют асинхронную работу друг с другом, и поэтому fs.readFile не имеет ничего, что он может прочитать при выполнении.

Вы можете ожидать s3.getObject с помощью функции обратного вызова / обещанияи затем fs.readFile после завершения обратного вызова / обещания (или просто получить доступ к объекту данных напрямую, а не записывать его в файл, в зависимости от вашего варианта использования эта опция может быть проще)

...