![](/img/trans.png)
[英]Given an array; how do I run a function for the first element and conditionally wait, return, or run the function for the next element?
[英]how can I return the first element of this array?
数组 blobstream 如下所示:
blobstream = [1,2,3]
我只想通过每个循环返回一个数组第一个循环:1 第二个循环:2 第三个循环:3
这样做的最佳解决方案是什么? 谢谢伊甸园
async function main() {
let i = 1;
for await (const blob of containerClient.listBlobsFlat()) {
const blockBlobClient = containerClient.getBlockBlobClient(blob.name);
const downloadBlockBlobResponse = await blockBlobClient.download(0);
const download = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log(download);
blobstream.push(download);
}
return blobstream;
}
听起来您正在寻找一个异步生成器函数(例如containerClient.listBlobsFlat()
,它似乎也是一个异步生成器函数)。 这看起来像这样:
async function* main() {
// ^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− generator function
for await (const blob of containerClient.listBlobsFlat()) {
const blockBlobClient = containerClient.getBlockBlobClient(blob.name);
const downloadBlockBlobResponse = await blockBlobClient.download(0);
const download = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log(download);
yield download;
// ^^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− yield a result
}
}
异步生成器函数返回异步生成器,您可以在for-await-of
循环中(或直接)使用它:
for await (const value of main()) {
// Here, `value` will be each value yielded by the generator
}
下面是一个使用setTimeout
模拟异步部分的示例:
const delay = (ms, value) => new Promise(resolve => setTimeout(resolve, ms, value)); async function somethingAsync(value) { await delay(Math.random() * 1000 + 200); return value * 2; } async function* main() { for (const value of [1, 2, 3, 4]) { const x = await somethingAsync(value); yield x; } } (async () => { try { console.log("Start"); for await (const x of main()) { console.log(x); } console.log("End"); } catch (e) { console.error(e.message || String(e)); } })();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.