У меня есть функция, которая получает данные из 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" завершится, и немедленно вернется с нулем.