작은 node.js 예제의 콜백 대기열 순서

Benoit
"use strict"

const
    fs = require('fs'),
    stream = fs.createReadStream("file.txt"),
    timeout = 0;

stream.on('data', function() {
    console.log("File Read");
});

setTimeout(function(){
    console.log("setTimeout : " + timeout);
}, timeout);

node.js / javascript를 배우고 있는데 왜이 프로그램이 반환되는지 궁금합니다.

setTimeout : 0
File Read

그 반대는 아닙니다.

내가 틀렸지 만 javascript콜백 대기열에 fifo가 있고 stream첫 번째와 먼저 쌓인 경우 수정 하시겠습니까?

의 비 차단 특성으로 인해 nodejs두 콜백이 "병렬"로 실행되고 setTimeout먼저 완료되고 반환된다고 생각합니다 (예 : 1000ms의 타임 아웃은 결과를 전환 함).

jfriend00

내가 틀렸지 만 자바 스크립트에서 콜백 대기열이 fifo이고 스트림을 먼저 쌓은 경우 수정합니까?

좀 빠지는. 비동기 콜백은 작업이 시작된 순서가 아니라 작업 완료 한 순서대로 FIFO로 처리됩니다 . 따라서 작업을 완료하는 데 걸리는 시간은 콜백이 예약되는시기를 결정하는 데 매우 중요합니다. 짧은 작업은 나중에 시작된 경우에도 긴 작업 전에 완료 될 수 있습니다.

파일을 열고 읽기 시작하는 데 시간이 걸리고 시간이 setTimeout()걸리지 않으므로 먼저 발생합니다. 독립적 인 비동기 작업이있는 경우 다양한 기능의 내부 타이밍에 따라 달라지기 때문에 어떤 순서로 발생하는지 거의 "알 수 없습니다".

readStream 작업은 타이머가 시작되기 전에 시작되지만 두 비동기 작업에 내부적으로 필요한 작업량으로 인해 readStream 작업이 첫 번째 데이터를 가져 오기 전에 타이머가 완료됩니다.

나는 nodejs의 비 차단 특성으로 인해 두 콜백이 "병렬"로 실행되고 setTimeout이 먼저 완료되고 반환된다고 생각합니다 (예를 들어 1000ms의 타임 아웃은 결과를 전환 함).

네, 맞습니다.


이렇게 생각하세요. 두 개의 강력한 메가폰과 정말 좋은 마이크가 있습니다. 메가폰을 가리키고 반환 된 에코를 듣기 위해 두 개의 타겟을 설정했습니다. 하나의 목표, 즉 매우 가깝고 하나의 목표는 매우 멀리 있습니다. 먼저 아주 멀리있는 목표물에서 확성기를 폭파 한 다음 즉시 가까운 목표물에서 확성기를 폭파합니다. 당연히 첫 번째 후 폭발을 보냈음에도 불구하고 가까운 대상에서 에코를 먼저 얻습니다. 왜냐하면 멀리있는 대상의 에코가 모든 추가 거리를 가로 질러 다시 돌아 오는 데 훨씬 더 오래 걸리기 때문입니다. readStream도 마찬가지입니다. 당신이 먼저 시작하더라도, 그것은 많은 이상보다 오래 걸리는 setTimeout(fn, 0)너무 setTimeout()첫째 완료 따라서 먼저 콜백을 호출합니다.


타이밍이 중요하다면 약속과 같은 도구를 사용하여 비동기 작업을 구체적으로 시퀀싱하거나 필요한 모든 결과가 준비 될 때까지 기다려야합니다. 좋은 설계는 코드에서 작업 순서를 지정하여 특별히 보장하지 않는 한 한 비동기 작업이 다른 작업보다 먼저 완료 될 것이라고 "가정"해서는 안됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ASIO IO 완료 콜백 순서 대 실제 IO 작업 순서

분류에서Dev

Node.js : for 루프의 각 반복 내에서 작동하지 않는 비동기 중첩 콜백

분류에서Dev

Node JS 콜백

분류에서Dev

node.js에서 async.series에 대한 콜백을 정의 할 위치

분류에서Dev

node.js의 콜백 함수에서 result.insertId 가져 오기

분류에서Dev

Node.js : 미들웨어 및 콜백 함수 실행 순서?

분류에서Dev

TypeError : 콜백은 Node.js의 함수가 아닙니다.

분류에서Dev

Async Waterfall / Node.js로 정의되지 않은 '콜백'

분류에서Dev

node.js 코드에서 콜백 매개 변수의 의미

분류에서Dev

node.js의 작업 대기열

분류에서Dev

node.js의 콜백에 대한 "호출 스택"

분류에서Dev

node.js 콜백 http 서버 읽기 디렉토리

분류에서Dev

Node.js 콜백에서 값 가져 오기

분류에서Dev

node.js 콜백 이상한 동작

분류에서Dev

Node.js : 하나의 함수에서 여러 콜백

분류에서Dev

Node.js : 하나의 함수에서 여러 콜백

분류에서Dev

Node.JS : 콜백으로서의 클래스 메소드

분류에서Dev

여러 Node.js 콜백 문제

분류에서Dev

Node.js MYSQL felixge, 삭제시 콜백

분류에서Dev

Node.js 제어 흐름 및 콜백

분류에서Dev

Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

분류에서Dev

Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

분류에서Dev

Javascript / node.js-Promise 내부의 콜백

분류에서Dev

node.js에서 여러 비동기 redis 호출이있는 콜백의 적절한 배치

분류에서Dev

Node.js : 1D 대 2D 배열의 1 억 요소 — 예기치 않은 메모리 문제

분류에서Dev

이 콜백 호출은 mongo .find 호출을 사용하여 Node.js에서 어떻게 작동합니까?

분류에서Dev

순수 JS의 함수 콜백

분류에서Dev

nodejs의 콜백 순서

분류에서Dev

생성기 기반 코드에 대한 Node.js 콜백

Related 관련 기사

  1. 1

    ASIO IO 완료 콜백 순서 대 실제 IO 작업 순서

  2. 2

    Node.js : for 루프의 각 반복 내에서 작동하지 않는 비동기 중첩 콜백

  3. 3

    Node JS 콜백

  4. 4

    node.js에서 async.series에 대한 콜백을 정의 할 위치

  5. 5

    node.js의 콜백 함수에서 result.insertId 가져 오기

  6. 6

    Node.js : 미들웨어 및 콜백 함수 실행 순서?

  7. 7

    TypeError : 콜백은 Node.js의 함수가 아닙니다.

  8. 8

    Async Waterfall / Node.js로 정의되지 않은 '콜백'

  9. 9

    node.js 코드에서 콜백 매개 변수의 의미

  10. 10

    node.js의 작업 대기열

  11. 11

    node.js의 콜백에 대한 "호출 스택"

  12. 12

    node.js 콜백 http 서버 읽기 디렉토리

  13. 13

    Node.js 콜백에서 값 가져 오기

  14. 14

    node.js 콜백 이상한 동작

  15. 15

    Node.js : 하나의 함수에서 여러 콜백

  16. 16

    Node.js : 하나의 함수에서 여러 콜백

  17. 17

    Node.JS : 콜백으로서의 클래스 메소드

  18. 18

    여러 Node.js 콜백 문제

  19. 19

    Node.js MYSQL felixge, 삭제시 콜백

  20. 20

    Node.js 제어 흐름 및 콜백

  21. 21

    Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

  22. 22

    Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

  23. 23

    Javascript / node.js-Promise 내부의 콜백

  24. 24

    node.js에서 여러 비동기 redis 호출이있는 콜백의 적절한 배치

  25. 25

    Node.js : 1D 대 2D 배열의 1 억 요소 — 예기치 않은 메모리 문제

  26. 26

    이 콜백 호출은 mongo .find 호출을 사용하여 Node.js에서 어떻게 작동합니까?

  27. 27

    순수 JS의 함수 콜백

  28. 28

    nodejs의 콜백 순서

  29. 29

    생성기 기반 코드에 대한 Node.js 콜백

뜨겁다태그

보관