使用nodejs将文件复制到NFS NAS,并将读/写流包装在promise中

我正在尝试使用nodejs(下面的基本工作代码)将文件复制到NFS挂载的目录中。将文件成功复制到NFS挂载后,promise链将中断而不会引发任何错误(promise链中的其他操作均未执行)。但是,Web服务器显示502错误的网关,表明发生了一些错误。

作为基本预防措施,我确保NAS上用户的UID和GID与客户端相同。

const fs = require('fs');

function myFunction(fileToCopy) {
    return Promise.resolve()
        .then(() => new Promise((resolve,reject) => {
            let newFileName = uuid() + '.txt';
            let fileReadStream = fs.createReadStream(fileToCopy),fileWriteStream = fs.createWriteStream('/mnt/' + newFileName,{ flags: 'w+',mode: 0o664 });

            fileReadStream
                .pipe(
                    fileWriteStream,{end: false}
                );

            fileReadStream
                .on('end',() => {
                    console.log('end event copying file (logged)');
                    fileWriteStream.end();

                })
                .on('error',error => {
                    console.error('error reading image stream (not logged)');
                    fileWriteStream.end();
                    reject(error);
                });

            fileWriteStream
                .on('finish',() => {
                    console.log('finished copying file (logged)');
                    resolve(fullFilename);
                })
                .on('error',error => {
                    console.log('error writing file (not logged)');
                    reject(error);
                })
        }))
}

Promise.resolve()
    .then(() => {
        let array = ['file1','file2','file3'];
        return Promise.all(
            array.map(file => myFunction(file))
        );
    })
    .then(() => console.log('never gets logged'))
    .catch(error => console.error('error never gets logged'));

编辑1:作为一点附加信息,如果已卸载NFS NAS目录,并将/mnt保留在本地系统上,则上述代码有效(承诺链完成,记录never gets logged)。

编辑2:修改了代码以包含强制的“结束”事件,并在最小的工作示例中添加了一些其他代码以显示更多上下文。

qqq691608414 回答:使用nodejs将文件复制到NFS NAS,并将读/写流包装在promise中

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2878907.html

大家都在问