async/await 및 forEach 루프를 사용하여 작동
P粉010967136
P粉010967136 2023-08-20 11:27:20
0
2
535
<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>
P粉010967136
P粉010967136

모든 응답(2)
P粉697408921

ES2018을 사용하면 위의 모든 답변을 크게 단순화할 수 있습니다.

으아악

사양 보기: proposal-async-iteration

간체:

으아악

2018-09-10: 이 답변은 최근 많은 주목을 받고 있습니다. 비동기 반복에 대한 자세한 내용은 Axel Rauschmayer의 블로그 게시물을 참조하세요.

P粉094351878

물론 코드는 작동하지만 예상한 대로 작동하지 않을 것이라고 확신합니다. 여러 비동기 호출을 트리거할 뿐이지만 printFiles 함수는 그 직후에 반환됩니다.

순서대로 읽어보세요

파일을 순차적으로 읽고 싶은데 실제로 사용할 수 없는 forEach。相反,你可以使用现代的for … of循环,其中await 경우 예상대로 작동합니다.

으아악

병렬 읽기

파일을 병렬로 읽으려면 실제로 얻은 promise 배열에서 forEach。每个async回调函数调用都会返回一个promise,但你却将它们丢弃而不是等待它们。相反,你可以使用map,并使用Promise.allwait를 사용할 수 없습니다.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿