这有什么区别吗:
const promises = await Promise.all(items.map(e => somethingAsync(e)));
for (const res of promises) {
// do some calculations
}
Run Code Online (Sandbox Code Playgroud)
和这个 ?
for await (const res of items.map(e => somethingAsync(e))) {
// do some calculations
}
Run Code Online (Sandbox Code Playgroud)
我知道在第一个片段中,所有的承诺都被同时触发,但我不确定第二个。for 循环是否等待第一次迭代完成以调用下一个 promise ?还是所有的 Promise 都是同时触发的,循环内部就像是它们的回调?
我编写了这段代码来迭代具有特定数字(如分页)的 github 问题,在本例中一次有 3 个问题:
const getUrl = (page) => `https://api.github.com/repos/angular/angular/issues?page=${page}`;
const getIssues = async function*() {
for (let p = 1; true; p++) {
const url = getUrl(p);
const rawData = await fetch(url, {
headers: { 'User-Agent': 'app' }
});
const issues = await rawData.json();
for (let issue of issues) {
yield issue;
}
}
};
const generator = getIssues();
document.querySelector('[data-next]').addEventListener('click', async function() {
let i = 0;
for await (let issue of generator) {
console.log(issue);
if (++i === …Run Code Online (Sandbox Code Playgroud) 我在 Dart 中有一个对象列表,我想对这些对象中的每一个执行异步操作。当所有异步操作完成后,我想执行最后一个操作。我目前正在使用如下代码执行此操作:
for (int i = 0; i < myObjectList.length; i++) {
await myAsynchronousOperation(myObjectList[i]);
}
doFinalOperation();
Run Code Online (Sandbox Code Playgroud)
虽然这在技术上可行,但我认为它效率低下,因为 for 循环将等待第一个异步操作完成后才开始第二个异步操作。因此,根据我的理解,我们最终会同步触发异步操作,这不可能是异步编程的意图。
因此,我的问题是,是否可以以某种方式立即触发所有异步操作,然后等到它们全部完成,然后最后执行最终操作。提前致谢!
for-await ×3
async-await ×2
javascript ×2
asynchronous ×1
dart ×1
for-loop ×1
generator ×1
node.js ×1
promise ×1