【问题标题】:node.js stream finish or error event not called未调用 node.js 流完成或错误事件
【发布时间】:2021-06-12 02:18:00
【问题描述】:

我有一个 node.js 函数,它应该创建一个用 Promise 包装的可写流。问题是promise返回pending,因为stream的finisherror事件没有被调用,应该resolverejectpromise。

存储文件

async storeFile(file,path,types){

        const { createReadStream, filename, mimetype } = await file
        const stream = createReadStream();

        var i = 0;
        var f = filename.split(".");
        var fName = "";
        for(let j = 0; j < (f.length - 1);j++){
            fName += f[j];
        }
        f = getSlug(fName,{lang:"sk"}) + ".jpg";

        do {

            if(i != 0){
                f = Math.floor(Math.random() * 1000) + "_" + f;
            }
            i++;

        }while (fs.existsSync(path + "/mala_" + f) || fs.existsSync(path + "/stredni_" + f) || fs.existsSync(path + "/velka_" + f) || fs.existsSync(path + "/maxi_" + f));
        
        const resultPromise = new Promise((resolve, reject) =>
            stream.on('error', error => {
                console.log('error triggered', error);
                if (stream.truncated)
                    fs.unlinkSync(path + "/" + f);
                reject(error)
            })
            .pipe(fs.createWriteStream(path + "/" + f))
            .on('error', error => {
                console.log('error triggered', error);
                reject(error);
            })
            .on('finish', () => {
                console.log('finish triggered');
                if(types){
                    var allPromises = [];
                    types.forEach(item => {
                        allPromises.push(this.resize(item,path,f));
                    });

                    if(allPromises.length > 0){
                        Promise.all(allPromises).then((values) => {
                            fs.unlinkSync(path + "/" + f);
                            resolve({file:f});
                        });
                    }else{
                        resolve({file:f});
                    }
                }else{
                    resolve({file:f});
                }

            })
        );
        return resultPromise;
    }

【问题讨论】:

    标签: javascript node.js es6-promise node.js-stream


    【解决方案1】:

    问题是我正在使用 graphql-upload,doesn't work well 带有新的 node.js 版本。

    【讨论】:

      猜你喜欢
      • 2015-07-27
      • 2013-12-02
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多