노드js & 지옥으로 돌아가는 약속을 피할 수 있다
Node의 주요 특징 중 하나를 살펴보았습니다.js는 비동기 운행 함수의 능력이다.그러나 우리가 계속 사용하고 있는 일반적인 자바스크립트 트레이닝 바퀴는 코드 파일을 위에서 아래로 읽게 하지만, 현재 함수가 실행되기 전에 다음 함수를 계속 읽지 않습니다.js는 우리로 하여금 일련의 서로 다른 함수를 동시에 처리할 기회를 주었다.
현실 세계의 다중 임무 처리≈ 비동기식 Javascript
현실 세계의 예를 살펴보자. 이것은 이러한 다중 임무 처리의 중요성을 강조한다. 바로 차량 관리소에 가는 것이다.이것은 거의 항상 객관적으로 불쾌한 경험이다. 그러나 차량 관리소가 사람들을 분류하지 않고, 단지 사람들이 도착하는 순서대로 그들을 돌보면 얼마나 무서울지 상상할 수 있겠니?일부 사람들이 DMV에 들어갈 때, 그들은 그곳에서 처음으로 운전면허증을 얻고, 그들의 차량을 등록하고, 임시 라벨을 얻는 등!모든 서비스는 서로 다른 시간을 필요로 하기 때문에 DMV는 먼저 그들이 제공한 서비스를 분류한 다음에 그들의 수요에 따라 줄을 서는 위치를 주는 것이 더 효과적이며, 모든 사람이 도착하는 순서대로 기다리게 하는 것이 아니라는 것을 깨달았다.
노드Javascript 파일을 제외하고 js는 거의 똑같이 했다.코드 줄을 위에서 아래로 읽고 한 줄이 실행될 때까지 기다린 다음 다음 다음 줄로 넘어가는 것보다 노드를 사용하는 것이 낫다.js는 요청 루트를 막지 않고 비동기적으로 실행합니다.
비차단 함수와 리셋
리셋은 노드를 허용한다.js는 이런 방식으로 운영한다.파일 다운로드, 파일 읽기, 데이터베이스와의 대화 등 모든 입출력 서비스에 사용됩니다.Google의 일반적인 Javascript 교육은 결과를 즉시 되돌려 주는 함수를 소개합니다.
const greeting = () => {
console.log('hello!');
}
greeting(); // 'hello!'
그러나 리셋 함수를 사용하는 데는 시간이 좀 걸려야 결과가 나온다.const greeting = 'hello,';
const personalizedGreeting = (greeting, callback) => {
if (err) {
console.log('oops, an error.');
} else {
callback(greeting);
}
};
personalizedGreeting(greeting, hiBetty);
function hiBetty (err, message) {
if (err) {
console.log('there is an error...');
} else {
console.log(`${message} betty the dog!`);
}
};
노드를 이해하는 데 매우 중요하다.js 이해 함수는 완성된 기초 위에서 뛰어넘을 수 있다.위의 예에서 hiBetty 함수는 선언되고 향상되었습니다(이것이 바로 우리가 인용 오류를 얻지 못하는 이유입니다).PersonalizedTreeting 함수를 호출하고 getName을 리셋 전달합니다.getName이 완료되면 해석기가 콘솔에 "hello Betty the dog"을 인쇄합니다.지옥에 들어가다
이 코드는 읽기 쉬운 코드이지만 일반적으로 입출력이 쉽지 않습니다.예를 들어 베티 더 독이 로그인했을 때 콘솔에 간단히 프린트한 게 아니라 그녀의 온라인 포털이 온전한지 확인하고 싶었다.그녀는 신청할 때 이름, 사진, 건강 기록과 스케줄이 있습니까?어디 보자...
const profileComplete = (dog, callback) => {
// is name attached to profile?
isNameLoaded(dog, (err, loaded) => {
if (err) {
callback(err, null);
} else if (!loaded) {
callback('enter your name!', null);
} else {
// if name is attached, is photo attached?
isPhotoUploaded(dog, (err, uploaded) => {
if (err) {
callback(err, null);
} else if (!uploaded) {
callback('upload a photo!', null);
} else {
// are health records online?
checkHealthRecords(dog, (err, available) => {
if (err) {
callback(err, null);
} else if (!available) {
callback('please upload your health records', null);
} else {
// is daily schedule online?
isScheduleAttached(dog, (err, attached) => {
if (err) {
callback(err, null);
} else if (!attached) {
callback('add your daily schedule!', null);
} else {
callback(null, attached);
}
})
}
})
}
})
}
})
}
이 코드는 눈을 상하게 하고, 이 코드를 쓰면 뇌를 상하게 한다.너는 코드가 어떻게 점차 오른쪽으로 확장되는지 보았니?이것이 바로 ppl 코드가 친절하게 말일 피라미드라고 부르는 것, 즉 인류의 정의 특징이다🔥 반송🔥 지옥.🔥.지옥을 돌아갈 수 있는 몇 가지 방법이 있다.너는 지옥이라고 할 수 있다.com 제안: 코드가 간단명료하고 모듈화된 기능을 유지하며 모든 오류를 처리합니다.또 다른 선택은 업그레이드와 어떻게 실시하는지 배우는 것이다🤞🏼 언약🤞🏼.
비동기 함수에서 승낙
promises는 ES6에 도입된 자바스크립트 대상으로, 링크 생성 코드와 소비 코드에 사용된다.약속이 있으면, 한 함수는 다른 함수가 완성된 후에 실행될 것이다.
const funcName = new Promise((resolve, reject) => {...});
새 약속에 전달되는 함수는 '집행기' 입니다. 결과로 돌아가는 함수를 봉인합니다.실행기가 결과를 되돌릴 때, 값이 있는'resolve '또는 오류가 있는'reject' 를 호출합니다.실행 중인 함수가 오류로 거부된 것이 아니라 값으로 해석되면 '' 와 같은 프로세서로 되돌아오는 값을 등록할 수 있습니다.그리고,.'와' 를 받다.마지막은;입니다.그런 다음 해석 값을 계속 전달합니다.catch "발생할 수 있는 모든 오류를 처리하고"."finally"는 마운트 표시기를 멈추기 때문에 청소하는 좋은 방법입니다.이제 우리 이전의 예를 살펴보자. 그러나 약속을 포함하기 위해 재구성을 거쳤다.
const profileComplete = (dog) => {
return isNameLoaded(dog)
.then((dog) => {
return isPhotoUploaded(dog);
})
.then((dog) => {
return checkHealthRecords(dog);
})
.then ((dog) => {
return isScheduleAttached(dog)
})
.catch((err) => {
return console.log('an error has occurred.')
});
};
봐라, 이렇게 하면 더욱 따라가기 쉽다!우리가 코드를 작성하는 과정에서 약속은 가장 직관적인 기능이 아닐 수도 있지만 중요한 것은 코드를 보편적으로 이해하기 쉬운 습관을 기르는 것이다. 왜냐하면 팀워크가 꿈을 실현시키기 때문이다.
Reference
이 문제에 관하여(노드js & 지옥으로 돌아가는 약속을 피할 수 있다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jessrichmond/node-js-the-promise-that-callback-hell-is-not-inevitable-22jh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)