如何等到所有嵌套函数执行完毕

时间:2019-10-10 19:38:55

标签: node.js asynchronous async-await

我有一个函数,该函数从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,
}

在“收到结果:空”之后,我收到“文件下载”消息。这意味着它不会等待“完成”完成并立即返回null。

0 个答案:

没有答案