Javascript 콜백 함수 및 약속
콜백 함수란?
간단히 말해서 다른 함수에 인수로 전달되는 함수는 콜백 함수입니다.
왜 필요한가요?
이 콜백 함수의 특별한 점은 무엇인지 궁금하실 것입니다. 다른 함수 내부에서 이미 한 함수를 호출할 수는 없었습니까?
답을 얻기 위해 이 두 가지 유형의 네트워크 호출을 살펴보겠습니다.
동기화 대 비동기 호출
콜백 함수는 특히 비동기 응답을 처리하는 데 사용됩니다.
콜백 지옥
Anything that can go wrong will go wrong. - Murphy's I Law
콜백 지옥은 일이 잘 되도록 의도적으로 또는 의도하지 않게 만들 수 있는 상황으로, 결과가 거의 없을 수 있습니다.
중첩 트리
setTimeout()
기능을 고려하십시오. 프로그래밍 세계에서 중첩은 악명 높고 악명 높습니다.이유 - 음, 그들은 코드를 읽을 수 없고, 복잡하고, 손상되기 쉽게 만듭니다.
약속
JavaScript의 Promise는 문자 그대로의 의미와 비슷합니다. 약속이 더 깨끗하고 관리하기 쉽다는 콜백 함수와 유사하게 훨씬 앞서 비동기 작업을 위한 핸들러를 연결할 수 있는 개체입니다.
네, 약속으로 콜백 지옥을 피할 수 있습니다.
Promise는 다음 상태 중 하나일 수 있습니다.
resolve()
를 사용하여 약속이 해결되었습니다.reject()
를 사용하여 약속이 거부되었습니다.이제 간단한 약속을 만들어 봅시다.
const promise = new Promise((resolve, reject) => {
if(res) {
resolve('resolved')
} else {
reject('reject')
}
})
promise.then(function(){
// On Successful response
// do whatever you feel like
})
이 예에서는
constructor
로 인스턴스화하여 약속 객체를 만듭니다.생성자는
resolved
및 rejected
약속에 대한 핸들러가 있는 콜백 함수를 받습니다.Promise가 해결되거나 거부된 후 발생하는 일은
then()
에 의해 결정됩니다.약속 사슬
API 호출로 작업할 때 응답을 받은 후 일반적으로 다른 호출을 수행하려고 합니다.
따라서 하나
then()
를 차례로 추가하여 약속 체인을 만들어야 합니다.해결된 모든 약속은
resolve handlers
에서 처리하고 거부된 약속은 reject handlers
에서 처리한다는 점을 기억하십시오.이 코드를 확인하고
function promise() {
const jobPromise = new Promise((resolve, reject) => {
let selected = true;
setTimeout(() => {
if (selected) {
resolve('Passed Interview');
} else {
reject('Failed Interview');
}
}, 1000);
})
return jobPromise
}
promise()
.then(decision, jobSearch)
.then(joining, negotiate)
function decision(param){
console.log(param)
let accept = true;
return new Promise ((resolve, reject) => {
if (accept) {
resolve('accept offer')
} else {
reject('reject offer')
}
});
}
function jobSearch (outcome) {
console.log(outcome)
console.log('Back to Job Search')
return new Promise((resolve, reject) => { reject() })
}
function negotiate () {
console.log('negotiation starts..... ')
}
function joining (decision) {
console.log('Revert to the Company', decision);
console.log('Joining Company')
}
무엇이 잘못될 수 있습니까?
약속을 부적절하게 처리하면 오류가 쉽게 눈에 띄지 않고 지나갈 수 있습니다.
then() 내의 콜백 핸들러에서 약속을 반환하거나 오류를 발생시키십시오. 그렇지 않으면 체인의 다음 해결 핸들러가 호출되며 우리는 그것을 원하지 않습니다.
Reference
이 문제에 관하여(Javascript 콜백 함수 및 약속), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rizways/javascript-callback-functions-promises-17lp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)