async/await 및 forEach 루프를 사용하여 작동
P粉010967136
2023-08-20 11:27:20
<p><code>forEach</code> 내부에서 <code>async</code>/<code>await</code>를 사용하는 데 문제가 있나요? 파일 배열을 반복하면서 각 파일의 내용에 대해 <code>await</code>를 사용하려고 합니다. </p>
<pre class="brush:php;toolbar:false;">'fs-promise'에서 fs 가져오기
비동기 함수 printFiles () {
const files = wait getFilePaths() // 이 함수가 제대로 작동한다고 가정합니다.
files.forEach(async (파일) => {
const 내용 = fs.readFile(file, 'utf8')을 기다립니다.
console.log(내용)
})
}
printFiles()</pre>
<p>이 코드는 작동하지만 그렇게 하는 데 문제가 있나요? 이와 같은 고차 함수에서는 <code>async</code>/<code>await</code>를 사용하면 안 된다고 해서 궁금한 점이 있는지 여쭤보고 싶었습니다. </p>
ES2018을 사용하면 위의 모든 답변을 크게 단순화할 수 있습니다.
으아악사양 보기: proposal-async-iteration
간체:
으아악2018-09-10: 이 답변은 최근 많은 주목을 받고 있습니다. 비동기 반복에 대한 자세한 내용은 Axel Rauschmayer의 블로그 게시물을 참조하세요.
물론 코드는 작동하지만 예상한 대로 작동하지 않을 것이라고 확신합니다. 여러 비동기 호출을 트리거할 뿐이지만
printFiles
함수는 그 직후에 반환됩니다.순서대로 읽어보세요
파일을 순차적으로 읽고 싶은데 실제로 사용할 수 없는
으아악forEach
。相反,你可以使用现代的for … of
循环,其中await
경우 예상대로 작동합니다.병렬 읽기
파일을 병렬로 읽으려면 실제로 얻은 promise 배열에서
으아악forEach
。每个async
回调函数调用都会返回一个promise,但你却将它们丢弃而不是等待它们。相反,你可以使用map
,并使用Promise.all
wait를 사용할 수 없습니다.