[英]Wait for node to finish writing file from https.get response before continuing?
while 循环创建以太坊钱包,根据生成的地址下载 robohash 头像并将它们写入文件。 gLoops 设置创建的钱包数量。 在继续while循环之前,我需要执行等待头像文件下载并写入文件。 我认为它应该用 async/await 来完成,但我无法理解它
let gLoops = 0;
while (gLoops < 10) {
pKey = crypto.randomBytes(32).toString("hex");
wallet = new ethers.Wallet(pKey);
address = wallet.address;
let url = urlBase + address;
https.get(url, (response) => {
let filePath = `${arg1path}\\avatars\\${address}.jpg`;
let stream = fs.createWriteStream(filePath);
response.pipe(stream);
stream.on("finish", () => {
stream.close();
console.log("Download Completed");
});
});
gLoops++;
}
尝试为您的函数使用异步等待功能?
您可以将https.get()
包装在一个 promise 中,并使用await
使for
循环暂停以使其完成:
function processAvatar(pKey, wallet, address, url) {
return new Promise((resolve, reject) => {
https.get(url, (response) => {
let filePath = `${arg1path}\\avatars\\${address}.jpg`;
let stream = fs.createWriteStream(filePath);
response.on("error", reject);
stream.on("finish", () => {
stream.close();
console.log("Download Completed");
resolve();
}).on("error", reject);
response.pipe(stream);
}).on("error", reject);
});
}
async function run() {
for (let gLoops = 0; gLoops < 10; ++gLoops)
let pKey = crypto.randomBytes(32).toString("hex");
let wallet = new ethers.Wallet(pKey);
let address = wallet.address;
let url = urlBase + address;
await processAvatar(pKey, wallet, address, url);
}
}
run().then(() => {
console.log("all done");
}).catch(err => {
console.log(err);
});
或者,您可以使用这里提到的 http 请求库之一,这些库已经是承诺感知的并直接使用它们。 该列表中我最喜欢的是got()
库,它支持您使用它的方式的流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.