[英]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
,因为未调用流的finish
或error
事件,这应该resolve
或reject
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.