찾다

 >  Q&A  >  본문

async/await 및 forEach 루프를 사용하여 작동

<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粉010967136P粉010967136472일 전543

모든 응답(2)나는 대답할 것이다

  • P粉697408921

    P粉6974089212023-08-21 10:27:16

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

    으아악

    사양 보기: proposal-async-iteration

    간체:

    으아악

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

    회신하다
    0
  • P粉094351878

    P粉0943518782023-08-21 09:14:18

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

    순서대로 읽어보세요

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

    으아악

    병렬 읽기

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

    으아악

    회신하다
    0
  • 취소회신하다