javascript - Node.js의 출력 순서가 예상과 다른 이유는 무엇입니까?
大家讲道理
大家讲道理 2017-05-31 10:40:11
0
2
623

지정된 디렉터리의 파일을 출력하는 데 사용되는 다음 코드를 살펴보세요

으아악

위 코드의 출력 결과를 이해할 수 없습니다. 이 프로그램 설계의 논리에 따르면 디렉터리의 모든 파일이 먼저 나열되어야 하며 그 다음 카운터 i==files.length는 "출력 완료"라는 터미널 문장을 출력해야 합니다.


위 사진처럼 마지막 단어 "출력 완료"가 먼저 출력될 뿐만 아니라, 인쇄 순서가 완전히 엉망이 되고, 여러 번 인쇄하는 순서도 불안정합니다.

비동기 호출에 시간 차이가 있는지 궁금해서 위 코드의 sleep(1000) 주석 부분을 제거했지만 결과는 여전히 예상한 것과 일치하지 않습니다. "다음과 같이 파일을 작성하세요" 프롬프트가 출력되었습니다. 처음에 1초 정도 멈췄다가 이어지는 문장이 거의 동시에 쉬는 시간도 없이 마지막 단어 "출력 완료"가 여전히 가장 먼저 출력됩니다.

결론적으로 제가 알고 싶은 것은

  1. 인쇄 결과가 불안정한 이유는 무엇입니까? "출력 완료" 프롬프트가 먼저 출력되는 이유는 무엇입니까?

  2. pause 문sleep(1000)을 추가한 후 처음에 1초만 정지하고 그 이후에는 더 이상 정지하지 않고 동시에 출력하는 이유는 무엇인가요?

  3. 이 문제를 해결하는 방법, 즉 "출력 완료" 프롬프트를 가능한 한 최소한의 수정만으로 최종적으로 출력하는 방법은 무엇입니까?

조언해주셔서 감사합니다!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(2)
大家讲道理
  1. fs.stat은 비동기 작업이므로 출력 파일 정보가 비동기적으로 실행되며 "출력 완료"가 먼저 인쇄되어야 합니다. 동기화하려면 https://nodejs.org/docs/lates...

  2. 를 사용하세요.
  3. sleep에 console.log('sleep')를 추가하여 한 번만 출력되는지 확인하시겠습니까?

  4. 파일 정보를 출력한 후에만 "출력 완료"가 출력되도록 하려면 첫 번째 지점에서 언급한 대로 fs.statSync를 사용하면 수정이 덜 필요할 것입니다

Ty80

@Dont의 답변에 따르면 fs.stat의 콜백 함수는 일반적으로 기본 프로그램 실행과 시간 사이의 간격 동안 호출되기 때문에 비동기 메서드 호출의 이유입니다. 호출 순서는 불확실합니다. statSync 메서드를 사용하여 동기화를 수행할 수 있습니다:

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