We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关键词:循环中的异步
在 JavaScript 中,处理异步函数时,for 循环和 forEach 方法之间的行为有显著差异,尤其是当你试图在循环体中使用 async/await 时。理解这些差异对于编写正确且高效的异步代码是很重要的。
for
forEach
async/await
Array.prototype.forEach 方法用于对数组的每个元素执行一次提供的函数,但它不会等待异步操作完成。换句话说,即便是在 forEach 循环里使用了 async 函数,这个 async 函数依旧会立即执行,但 forEach 不会等待它完成。
Array.prototype.forEach
async
const array = [1, 2, 3]; array.forEach(async (item) => { await doAsyncOperation(item); // 将立即开始但不会等待完成 }); console.log("Finished"); // 这行代码不会等待上面的异步操作完成就执行
上面的代码中,doAsyncOperation 会对数组中的每个元素立即开始执行,但 forEach 不会等待它们完成。因此,console.log('Finished') 会在所有异步操作完成之前执行。
doAsyncOperation
console.log('Finished')
与 forEach 方法不同,for 循环允许在每次迭代时使用 await 关键字等待异步操作的完成。因此,如果你需要按顺序等待每个异步操作完成,for 循环是更好的选择。
await
const array = [1, 2, 3]; (async () => { for (let item of array) { await doAsyncOperation(item); // 将等待异步操作完成后再继续下一次迭代 } console.log("Finished"); // 仅在所有异步操作完成后执行 })();
这里,每个 doAsyncOperation 调用会在下一个开始之前完成。console.log('Finished') 等到所有异步操作完成后才执行,这样就能保证异步操作的完成顺序。
for...of
可以参考下面的文档: lgwebdream/FE-Interview#934
The text was updated successfully, but these errors were encountered:
No branches or pull requests
关键词:循环中的异步
在 JavaScript 中,处理异步函数时,
for
循环和forEach
方法之间的行为有显著差异,尤其是当你试图在循环体中使用async/await
时。理解这些差异对于编写正确且高效的异步代码是很重要的。使用
forEach
调用异步函数Array.prototype.forEach
方法用于对数组的每个元素执行一次提供的函数,但它不会等待异步操作完成。换句话说,即便是在forEach
循环里使用了async
函数,这个async
函数依旧会立即执行,但forEach
不会等待它完成。上面的代码中,
doAsyncOperation
会对数组中的每个元素立即开始执行,但forEach
不会等待它们完成。因此,console.log('Finished')
会在所有异步操作完成之前执行。使用
for
循环调用异步函数与
forEach
方法不同,for
循环允许在每次迭代时使用await
关键字等待异步操作的完成。因此,如果你需要按顺序等待每个异步操作完成,for
循环是更好的选择。这里,每个
doAsyncOperation
调用会在下一个开始之前完成。console.log('Finished')
等到所有异步操作完成后才执行,这样就能保证异步操作的完成顺序。总结
forEach
。for
循环(或其他支持await
的循环,如for...of
或传统的for
循环)是一个更好的选择。for
循环(允许await
)比forEach
方法(不等待异步调用完成) 提供了更大的灵活性和控制力。参考
可以参考下面的文档: lgwebdream/FE-Interview#934
The text was updated successfully, but these errors were encountered: