gpt4 book ai didi

node.js - 使用 util.promisify 和 async/await 循环中的流管道有什么问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:57 24 4
gpt4 key购买 nike

我有一组图像网址。我尝试循环加载它们,调整它们的大小并保存到文件系统。首先我遇到了问题,该请求只是实现流接口(interface),但我不能像这样直接在管道中使用它:await pipeline(request, imgstream, writableStream) - 通过将请求与管道结合起来解决了这个问题。

这是代码:

async function processImage(url) {
try {
const pipeline = util.promisify(stream.pipeline);
const resizeTransform = sharp()
.resize(160, 105);
const imgstream = request(url).pipe(resizeTransform);
const localFile = getLocalUrl(url);
const writableStream = fs.createWriteStream(localFile);
await pipeline(imgstream, writableStream);
} catch (err) {
console.log(err);
}
}

urlArr.forEach(processImage);

如果我使用 100 个图像运行此命令,则它对于 30...50 个图像可以正常工作,但其余图像的文件大小为 0 字节,并且控制台会打印以下内容:错误:读取 ECONNRESET 在 TCP.onStreamRead (内部/stream_base_commons.js:162:27)

我目前使用的是 win 10 计算机。代码可能有什么问题?

最佳答案

实际上你的代码是错误的。您正在调用 urlArr.forEach(processImage);,因为 processImage 是一个异步函数,是 forEach 的默认实现不等待作为参数传递的回调。您需要这样的东西来等待函数:

for(let i=0; i< urlArr.length; i++){
await processImage(urlArr[i]);
}

关于node.js - 使用 util.promisify 和 async/await 循环中的流管道有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57933162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com