자바 스크립트 약속의 정의와 이벤트와의 차이점은 무엇입니까?

ts248

저는 몇 년 전에 JavaScript를 다루었습니다. 그래서 저는 특정 이벤트가 발생하면 자동으로 실행되는 함수로서 "이벤트"라는 용어를 잘 알고 있습니다. 내 정의가 잘못된 경우 수정 해주세요.

이제 나는 언어를 다시 다루어야합니다. 나에게 새로운이 약속에서 아이디어를 얻으십시오. 그러나 그것에 대한 좋은 정의를 찾을 수 없습니다.

누구든지 JavaScript 약속이 무엇인지 이해하기 쉽게 정의 할 수 있습니까?

더 이상 : 이벤트와 매우 유사한 것 같습니다. 특정 이벤트가 발생하면 자동으로 호출되는 콜백 함수를 정의합니다.

JavaScript-events와 -promises의 차이점은 무엇입니까?

대초원

첫 번째 관점에서는 매우 유사합니다. 이벤트에는 콜백 함수가 있고 Promise에는 콜백 함수가 있습니다. 더욱 기술적으로는 Promises가 이벤트에서만 수행하는 거의 유사한 작업을 수행 할 수 있습니다.

이벤트와 약속은 모두 비동기 코드에 유용합니다. 설명하기 위해 추상적 인 코드를 작성하겠습니다. 예를 들어, 비동기 코드가 있고 그 후에 경고가 발생합니다.

function someAsyncFunction() {
    setTimeout(function() {
        // some long async logic here
        console.log('What the hell is Promises?');
    }, 2000);
}
someAsyncFunction();

여기서 Timeout은 Async입니다. 메인 트레드가 아닌 코드를 실행하고 얼마 후에 실행하기 때문에 정확히 언제 발생하는지 확실하지 않습니다 (여기서는 약 2 초 정도입니다).

이제 비동기 작업의 결과로 무언가를해야한다고 상상해보십시오. 예를 들어 기능이 AsyncResultCalculator있고 해당 기능을 실행해야합니다. 넌 뭐 할거야? 몇 가지 선택 사항이 있습니다.

  • 비동기 코드에 콜백 함수에 전달하고 함수를 실행 AsyncResultCalculator비동기 코드가 그것의 작업을 완료 할 때
  • 일부 이벤트 (예 : 'DoSomethingAfterAsync'이벤트)를 정의하고 비동기 코드가 완료되거나 실패한 후 해당 이벤트를 트리거합니다.
  • 약속 사용

결과적으로이 모든 변형은 함수 실행이라는 한 가지 작업 만 수행합니다 AsyncResultCalculator. 그렇다면 동일한 결과를내는 3 가지 방법이있는 이유는 무엇입니까? 멋지니까! 동일한 작업을 수행하는 것은 다른 기술 일 뿐이지 만 코드의 난이도를 변경합니다. 어떤 방법은 코드를 더 복잡하게 만들고, 어떤 방법은 코드를 더 크게 만들고, 어떤 방법은 코드를 더 우아하게 만듭니다.

그래서 콜백 함수를 실행하는 방법이나 이벤트를 트리거하는 방법을 알고 있다고 생각하지만 약속은 어떻습니까? 어떻게 사용하나요? 아주 쉽게. Async Timeout으로 돌아가서 살펴 보겠습니다.

function AsyncResultCalculator(res) {
    // calculate result of async action!!!
    console.log(res + 1);
}

function someAsyncFunction() {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            // some long async logic here
            resolve(55); // or reject
        }, 2000);
    }
}

someAsyncFunction().then(AsyncResultCalculator);

그래서 여기서 약속을 사용하는 요점은 무엇입니까? 비동기 작업에 대한 현대적인 스타일이기 때문입니다. 약속이 있으면 다른 개발자가 코드를 더 우아하고 쉽게 읽을 수 있습니다. 또한 약속은 다음과 같은 기능의 체인을 구축 할 수 있기 때문에 유용합니다.

someAsyncFunction()
    .then(function(){ ... })
    .then(function(){ ... });

그러나 물론 어떤 경우에는 콜백이나 이벤트를 사용하는 것이 나쁘지 않습니다. 예를 들어, 다른 JS 파일에서 비동기 결과를 포착해야하고 비동기 작업이있는 원본 파일에서 promise 또는 콜백을 사용하지 않으려는 경우 이벤트가 더 유용합니다.

모든 JavaScript 언어는 이벤트, 콜백 및 약속의 혼합입니다. D 현명하게 사용하십시오.

  • DOM 이벤트 또는 일부 복잡한 상황에 이벤트를 사용하십시오.
  • 비동기 작업에 Promise 사용
  • 동기화 작업 또는 약속을 사용하지 않으려는 경우 콜백 사용

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바와 자바 스크립트 >>> 연산자의 차이점은 무엇입니까?

분류에서Dev

여러 자바 스크립트 소스와 단일 소스의 차이점은 무엇입니까?

분류에서Dev

이 자바 스크립트 클로저의 차이점은 무엇입니까?

분류에서Dev

인라인 스크립트와 자사 및 타사 스크립트의 차이점은 무엇입니까?

분류에서Dev

$, this 및 $ (this) 자바 스크립트 기초의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트 집합 : Set.prototype.values ()와 Set.prototype [@@ iterator] ()의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트에서 Date (d.getTime ())와 new Date (d.getTime ())의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트에서 var a = xyz []와 var a = xyz {}의 차이점은 무엇입니까?

분류에서Dev

이벤트와 delegateEvents의 차이점은 무엇입니까?

분류에서Dev

바이트와 문자의 차이점은 무엇입니까 (적어도 * nixwise)?

분류에서Dev

바이트와 문자의 차이점은 무엇입니까 (적어도 * nixwise)?

분류에서Dev

Loopback의 작업 후크와 이벤트의 차이점은 무엇입니까?

분류에서Dev

엔트로피 : 비트와 바이트의 차이점은 무엇입니까?

분류에서Dev

&&와 |의 차이점은 무엇입니까? bash 스크립트에서?

분류에서Dev

bash 스크립트에서 "<<-EOF"와 "<< EOF"의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트에서 인터페이스와 생성자 함수의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트에서 이러한 변수의 차이점은 무엇입니까

분류에서Dev

자바 스크립트에서 데이터 유형과 기본 유형의 차이점은 무엇입니까?

분류에서Dev

자바 스크립트에서`Set`과`Map`의 의미 상 차이점은 무엇입니까?

분류에서Dev

자바 스크립트 모듈화와 의존성 주입의 차이점

분류에서Dev

Android에서 트리거와 이벤트의 차이점은 무엇입니까

분류에서Dev

자바 스크립트에서 함수 호출의 차이점은 무엇입니까?

분류에서Dev

이 PHP 생성 자바 스크립트의 문제점은 무엇입니까?

분류에서Dev

이 자바 스크립트 함수의 문제점은 무엇입니까?

분류에서Dev

sh 스크립트와 sh <스크립트의 차이점은 무엇입니까?

분류에서Dev

CSS에서 클래스 / ID와 사용자 정의 HTML5 속성의 차이점은 무엇입니까?

분류에서Dev

Outlook의 되풀이 약속과 되풀이 이벤트의 차이점은 무엇입니까?

분류에서Dev

바이러스와 스파이웨어의 차이점은 무엇입니까?

분류에서Dev

스크립트 파일과 바이너리 파일의 차이점을 찾는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    자바와 자바 스크립트 >>> 연산자의 차이점은 무엇입니까?

  2. 2

    여러 자바 스크립트 소스와 단일 소스의 차이점은 무엇입니까?

  3. 3

    이 자바 스크립트 클로저의 차이점은 무엇입니까?

  4. 4

    인라인 스크립트와 자사 및 타사 스크립트의 차이점은 무엇입니까?

  5. 5

    $, this 및 $ (this) 자바 스크립트 기초의 차이점은 무엇입니까?

  6. 6

    자바 스크립트 집합 : Set.prototype.values ()와 Set.prototype [@@ iterator] ()의 차이점은 무엇입니까?

  7. 7

    자바 스크립트에서 Date (d.getTime ())와 new Date (d.getTime ())의 차이점은 무엇입니까?

  8. 8

    자바 스크립트에서 var a = xyz []와 var a = xyz {}의 차이점은 무엇입니까?

  9. 9

    이벤트와 delegateEvents의 차이점은 무엇입니까?

  10. 10

    바이트와 문자의 차이점은 무엇입니까 (적어도 * nixwise)?

  11. 11

    바이트와 문자의 차이점은 무엇입니까 (적어도 * nixwise)?

  12. 12

    Loopback의 작업 후크와 이벤트의 차이점은 무엇입니까?

  13. 13

    엔트로피 : 비트와 바이트의 차이점은 무엇입니까?

  14. 14

    &&와 |의 차이점은 무엇입니까? bash 스크립트에서?

  15. 15

    bash 스크립트에서 "<<-EOF"와 "<< EOF"의 차이점은 무엇입니까?

  16. 16

    자바 스크립트에서 인터페이스와 생성자 함수의 차이점은 무엇입니까?

  17. 17

    자바 스크립트에서 이러한 변수의 차이점은 무엇입니까

  18. 18

    자바 스크립트에서 데이터 유형과 기본 유형의 차이점은 무엇입니까?

  19. 19

    자바 스크립트에서`Set`과`Map`의 의미 상 차이점은 무엇입니까?

  20. 20

    자바 스크립트 모듈화와 의존성 주입의 차이점

  21. 21

    Android에서 트리거와 이벤트의 차이점은 무엇입니까

  22. 22

    자바 스크립트에서 함수 호출의 차이점은 무엇입니까?

  23. 23

    이 PHP 생성 자바 스크립트의 문제점은 무엇입니까?

  24. 24

    이 자바 스크립트 함수의 문제점은 무엇입니까?

  25. 25

    sh 스크립트와 sh <스크립트의 차이점은 무엇입니까?

  26. 26

    CSS에서 클래스 / ID와 사용자 정의 HTML5 속성의 차이점은 무엇입니까?

  27. 27

    Outlook의 되풀이 약속과 되풀이 이벤트의 차이점은 무엇입니까?

  28. 28

    바이러스와 스파이웨어의 차이점은 무엇입니까?

  29. 29

    스크립트 파일과 바이너리 파일의 차이점을 찾는 방법은 무엇입니까?

뜨겁다태그

보관