썽크 사용 : 코드가 순차적으로 인쇄되지 않는 이유는 무엇입니까?

Asool

나는 썽크를 이해하려고 노력하고 있습니다. Lynda에 대한 Kyle Simpson의 Rethinking Async JS 과정을 살펴 보겠습니다.

이 코드가 있습니다.

function makeThunk(fn) {
    var args = [].slice.call(arguments, 1);
    return function(cb) {
        args.push(cb);
        fn.apply(null, args);
    }
}

function addAsync(x,y, cb) {
    setTimeout(function() {
        cb(x+y);
    }, 1000);
}


var thunk = makeThunk(addAsync, 10,15);

이제 다음을 실행할 때 :

thunk(function(sum) {
    console.log(sum * sum);
})

thunk(function(sum) {
    console.log(sum);
})

결과는 625 두 번 인쇄됩니다.

그러나 내가 실행할 때

thunk(function(sum) {
    console.log(sum);
})
thunk(function(sum) {
    console.log(sum * sum);
})

결과는 두 번 실행됩니다.

첫 번째 경우에는 625가 인쇄되고 25는 인쇄됩니다. 두 번째 경우에는 25가 인쇄되고 625가 인쇄됩니다.

내 기대가 잘못된 이유는 무엇입니까?

조나스 윌 름스
var thunk = makeThunk(addAsync, 10,15);

그 후 닫힌 args 배열은 다음과 같습니다.

[10, 15]

이제 thunk 를 호출하면 :

thunk(function one(sum) {
console.log(sum * sum);
})

내부 인수는 다음과 같습니다.

[10, 15, one]

그리고 함수는 처음으로 실행됩니다. 그런 다음 전화하십시오.

thunk(function two(sum) {
  console.log(sum);
})

따라서 args는 다음과 같습니다.

[10, 15, one, two]

따라서 addAsync 는 다음과 같이 호출됩니다.

addAsync(10, 15, one, two)

따라서 cb다시 하나 이므로 첫 번째 함수가 두 번 실행됩니다.


이 문제를 해결하려면 변경되지 않는 연결로 푸시를 통해 수정을 변경할 수 있습니다.

return function(cb) {
    fn.apply(null, args.concat(cb));
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 Javascript 코드가 순차적으로 실행되지 않는 이유는 무엇입니까?

분류에서Dev

then () 체인 메서드가 순차적으로 실행되지 않는 이유는 무엇입니까?

분류에서Dev

사용자 ID가 각도 js로 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

이 코드가 순차적으로 실행되는 이유는 무엇입니까?

분류에서Dev

쉘 스크립트가 순차적으로 실행되지 않는 이유는 무엇입니까? (imagemagick일까요?)

분류에서Dev

여유 메모리가 디스크 캐시로 사용되지 않는 이유는 무엇입니까?

분류에서Dev

내 JavaScript가 내 HTML로 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

내 async.waterfall 자바 스크립트 순차 코드가 끝나지 않는 이유는 무엇입니까?

분류에서Dev

AsyncTask가 사용되지 않는 라인을 수행하는 이유는 무엇입니까? 내 코드에서?

분류에서Dev

코드가 출력으로 아무것도 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

매번 디스크를 사용하지 않고 대용량 고유 레코드에 가장 적합한 데이터 구조는 무엇입니까?

분류에서Dev

다음 코드로 인해 복사 대신 개체가 이동하지 않는 이유는 무엇입니까?

분류에서Dev

인쇄 메시지가 내 C # 코드에 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

사용자가 입력 한 내용을 확인하는이 코드가 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

썽크를 사용하는 GraphQL 순환 참조-오류 : 필드 유형은 출력 유형이어야하지만 정의되지 않음

분류에서Dev

<style scoped>의 CSS 코드가 전역 적으로 적용되는 이유는 무엇입니까?

분류에서Dev

내 코드가 올바른 최소 차이를 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

지속적인 캐시 미스가있는 경우 CPU 코어의 워크로드 (사용량)가 100 %가되는 것은 무엇입니까?

분류에서Dev

ToString ()의 암시 적 사용으로 인해 예외가 발생하지 않는 이유는 무엇입니까?

분류에서Dev

페이지로드시 체크 박스가 확인되지 않는 이유는 무엇입니까?

분류에서Dev

이 고정 경로가 적용되지 않는 이유는 무엇입니까?

분류에서Dev

물리적 RAM이 가득 차 있지 않아도 스왑이 사용되는 이유는 무엇입니까?

분류에서Dev

내 빠른 코드가 순서대로 실행되지 않는 이유는 무엇입니까? Firebase 인증

분류에서Dev

변수가 전역으로 선언 된 경우에도 Javascript 코드가 '정의되지 않음'을 인쇄하는 이유는 무엇입니까?

분류에서Dev

std :: cout 및 printf ()가 usleep () 지연 사이에 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

순서가 지정되지 않은 목록에 상대 위치 값을 사용할 때 가로로 스크롤 할 수있는 이유는 무엇입니까?

분류에서Dev

CSS를 사용할 때 페이지가로드되지 않는 이유는 무엇입니까?

분류에서Dev

내 레코드가 실행되는 순서대로 삽입되지 않는 이유는 무엇입니까?

분류에서Dev

이 코드가 성공적으로 실행되지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    이 Javascript 코드가 순차적으로 실행되지 않는 이유는 무엇입니까?

  2. 2

    then () 체인 메서드가 순차적으로 실행되지 않는 이유는 무엇입니까?

  3. 3

    사용자 ID가 각도 js로 인쇄되지 않는 이유는 무엇입니까?

  4. 4

    이 코드가 순차적으로 실행되는 이유는 무엇입니까?

  5. 5

    쉘 스크립트가 순차적으로 실행되지 않는 이유는 무엇입니까? (imagemagick일까요?)

  6. 6

    여유 메모리가 디스크 캐시로 사용되지 않는 이유는 무엇입니까?

  7. 7

    내 JavaScript가 내 HTML로 인쇄되지 않는 이유는 무엇입니까?

  8. 8

    내 async.waterfall 자바 스크립트 순차 코드가 끝나지 않는 이유는 무엇입니까?

  9. 9

    AsyncTask가 사용되지 않는 라인을 수행하는 이유는 무엇입니까? 내 코드에서?

  10. 10

    코드가 출력으로 아무것도 인쇄하지 않는 이유는 무엇입니까?

  11. 11

    매번 디스크를 사용하지 않고 대용량 고유 레코드에 가장 적합한 데이터 구조는 무엇입니까?

  12. 12

    다음 코드로 인해 복사 대신 개체가 이동하지 않는 이유는 무엇입니까?

  13. 13

    인쇄 메시지가 내 C # 코드에 인쇄되지 않는 이유는 무엇입니까?

  14. 14

    사용자가 입력 한 내용을 확인하는이 코드가 제대로 작동하지 않는 이유는 무엇입니까?

  15. 15

    썽크를 사용하는 GraphQL 순환 참조-오류 : 필드 유형은 출력 유형이어야하지만 정의되지 않음

  16. 16

    <style scoped>의 CSS 코드가 전역 적으로 적용되는 이유는 무엇입니까?

  17. 17

    내 코드가 올바른 최소 차이를 인쇄하지 않는 이유는 무엇입니까?

  18. 18

    지속적인 캐시 미스가있는 경우 CPU 코어의 워크로드 (사용량)가 100 %가되는 것은 무엇입니까?

  19. 19

    ToString ()의 암시 적 사용으로 인해 예외가 발생하지 않는 이유는 무엇입니까?

  20. 20

    페이지로드시 체크 박스가 확인되지 않는 이유는 무엇입니까?

  21. 21

    이 고정 경로가 적용되지 않는 이유는 무엇입니까?

  22. 22

    물리적 RAM이 가득 차 있지 않아도 스왑이 사용되는 이유는 무엇입니까?

  23. 23

    내 빠른 코드가 순서대로 실행되지 않는 이유는 무엇입니까? Firebase 인증

  24. 24

    변수가 전역으로 선언 된 경우에도 Javascript 코드가 '정의되지 않음'을 인쇄하는 이유는 무엇입니까?

  25. 25

    std :: cout 및 printf ()가 usleep () 지연 사이에 인쇄되지 않는 이유는 무엇입니까?

  26. 26

    순서가 지정되지 않은 목록에 상대 위치 값을 사용할 때 가로로 스크롤 할 수있는 이유는 무엇입니까?

  27. 27

    CSS를 사용할 때 페이지가로드되지 않는 이유는 무엇입니까?

  28. 28

    내 레코드가 실행되는 순서대로 삽입되지 않는 이유는 무엇입니까?

  29. 29

    이 코드가 성공적으로 실행되지 않는 이유는 무엇입니까?

뜨겁다태그

보관