Как дождаться выполнения всех вложенных функций - PullRequest
0 голосов
/ 10 октября 2019

У меня есть функция, которая получает данные из URL-адреса в виде потока, а затем я использую канал, чтобы записать эти данные в файл с помощью fs.createWriteStream. Я хочу, когда файл создан, то он должен что-то вернуть. Моя текущая реализация не ждет создания файла и немедленно возвращается. Вот фрагмент

const fs = require('fs');
const path = require('path');
const axios = require("axios");

const FileUploadPath = "./uploads/";

const downloadFile = async (url, filePath) => {

    const writer = fs.createWriteStream(filePath)

    const response = await axios({
        url,
        method: 'GET',
        responseType: 'stream'
    })

    response.data.pipe(writer)

    return new Promise((resolve, reject) => {
        writer.on('finish', async function (err) {
            console.log(err);
            console.log("file downloaded")
            resolve(filePath)
          }

        )
        writer.on('error', reject(null))                
    });


}

const file_resolvers = {
    Query: {
        async file_download(parent, args, context, info) {

            const fileUrl = // some file url
            var filePath = // path where downloaded file will be saved 

            console.log("Downloading File " + fileUrl);
            const result = await downloadFile(fileUrl, filePath);
            console.log("Result received: " + result);

       },

    },

};


module.exports = {
    file_resolvers,
}

Я получаю сообщение "Файл загружен" после "Результат получен: пусто". Это означает, что он не ждет, когда "finish" завершится, и немедленно вернется с нулем.

...