简体   繁体   English

node.js stream 完成或错误事件未调用

[英]node.js stream finish or error event not called

I have a node.js function that should create a writeable stream wrapped with a Promise.我有一个 node.js function 应该创建一个可写的 stream 包裹着 ZA5A3F0F2507A4479982AACAC。 The issue is that the promise returns pending , because stream's finish or error event is not called which should resolve or reject the promise.问题是 promise 返回pending ,因为未调用流的finisherror事件,这应该resolvereject promise。

storeFile存储文件

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;
    }

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

The issue was that I am using graphql-upload, which doesn't work well with new node.js version.问题是我正在使用 graphql-upload,它不适用于新的 node.js 版本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM