你如何使用带有节点 createWriteStream 的 got 节点模块来下载带有电子的图像?
How do you use got node module with node createWriteStream to download an image with electron?
我查看了其他几个答案,但它们对我没有帮助。
节点版本 16.8.0
windows 10
“得到”:“11.8.2”,
电子 14.0.0
这就是我正在尝试的。下面的代码确实下载了文件,但 createWriteStream 抛出错误 --
Uncaught (in promise) TypeError [ERR_INVALID_RETURN_VALUE]: Expected
AsyncIterable or Promise to be returned from the "destination"
function but got type undefined.
我的渲染文件中的代码
module.exports.getTile = async function (url, outputFilePath) {
const pipeline = promisify(stream.pipeline);
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath),
(err) => {
if (err) {
console.error('Pipeline failed', err);
} else {
console.log('Pipeline succeeded');
}
});
stream.finished(input, (err) => {
if (err) {
console.error('Stream failed', err);
} else {
console.log('Stream is done reading');
}
});
};
我用 await getTile(url, tilePath);
调用函数
stream.pipeline(...streams, callback)
根据 documentation.
接受 n 流中间件和最终回调参数
util.promisify(...args, callback)
接受一个带有错误优先回调的函数,并将其包装到一个抛出错误的异步函数中。 (docs)
当两者结合时,util.promisify
将使用 stream.pipeline
中的最终回调参数,而 return 一个仅接受流中间件的异步函数:util.promisify(stream.pipeline)(...streams)
。
因此,以下片段
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath),
(err) => {
if (err) {
console.error('Pipeline failed', err);
} else {
console.log('Pipeline succeeded');
}
});
应重写为:
try {
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath)
)
console.log('Pipeline succeeded');
}
catch( error ){
console.error('Pipeline failed', err);
}
我查看了其他几个答案,但它们对我没有帮助。
节点版本 16.8.0 windows 10 “得到”:“11.8.2”, 电子 14.0.0
这就是我正在尝试的。下面的代码确实下载了文件,但 createWriteStream 抛出错误 --
Uncaught (in promise) TypeError [ERR_INVALID_RETURN_VALUE]: Expected AsyncIterable or Promise to be returned from the "destination" function but got type undefined.
我的渲染文件中的代码
module.exports.getTile = async function (url, outputFilePath) {
const pipeline = promisify(stream.pipeline);
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath),
(err) => {
if (err) {
console.error('Pipeline failed', err);
} else {
console.log('Pipeline succeeded');
}
});
stream.finished(input, (err) => {
if (err) {
console.error('Stream failed', err);
} else {
console.log('Stream is done reading');
}
});
};
我用 await getTile(url, tilePath);
stream.pipeline(...streams, callback)
根据 documentation.
util.promisify(...args, callback)
接受一个带有错误优先回调的函数,并将其包装到一个抛出错误的异步函数中。 (docs)
当两者结合时,util.promisify
将使用 stream.pipeline
中的最终回调参数,而 return 一个仅接受流中间件的异步函数:util.promisify(stream.pipeline)(...streams)
。
因此,以下片段
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath),
(err) => {
if (err) {
console.error('Pipeline failed', err);
} else {
console.log('Pipeline succeeded');
}
});
应重写为:
try {
await pipeline(
got.stream(url),
fs.createWriteStream(outputFilePath)
)
console.log('Pipeline succeeded');
}
catch( error ){
console.error('Pipeline failed', err);
}