在Electron中使用got搭配createWriteStream下载图片报错如何解决?
解决方案
错误根因
util.promisify转换后的stream.pipeline为Promise风格API,不再支持传入末尾回调参数,你传入的回调函数被错误识别为管道目标流,触发类型不匹配报错- 代码中
stream.finished监听的input变量未定义,属于冗余代码,Promise版本的pipeline本身会在流处理完成/报错时自动resolve/reject,无需额外监听流状态
正确实现代码
const { promisify } = require('util'); const stream = require('stream'); const fs = require('fs'); const got = require('got'); const pipeline = promisify(stream.pipeline); module.exports.getTile = async function (url, outputFilePath) { try { await pipeline( got.stream(url), fs.createWriteStream(outputFilePath) ); console.log('Pipeline succeeded'); console.log('Stream is done reading'); } catch (err) { console.error('Pipeline failed', err); // 可根据业务需要选择是否抛出错误给上层调用方处理 throw err; } };
调用说明
原有调用方式await getTile(url, tilePath);无需修改,建议上层调用时添加try/catch块捕获异常做业务兼容处理。
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

