저는 몇 년 전에 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
비동기 코드가 그것의 작업을 완료 할 때결과적으로이 모든 변형은 함수 실행이라는 한 가지 작업 만 수행합니다 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 현명하게 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다