return
목적은 후에 제거 기능의 실행을 종료하고, 그 후, 코드의 실행을 방지하기위한 것이다.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return; // The function execution ends here
}
resolve(numerator / denominator);
});
}
이 경우 resolve(numerator / denominator);
엄격하게 필요하지 않은 실행을 방지 합니다. 그러나 향후 가능한 트랩을 방지하기 위해 실행을 종료하는 것이 여전히 바람직합니다. 또한 불필요하게 코드 실행을 방지하는 것이 좋습니다.
배경
약속은 3 가지 상태 중 하나 일 수 있습니다.
- 보류 중-초기 상태 보류 상태에서 다른 상태 중 하나로 이동할 수 있습니다
- 이행-성공적인 운영
- 거부 됨-작업 실패
약속이 이행되거나 거절 될 때,이 상태는 무기한 (정착)으로 유지됩니다. 따라서 약속 된 약속을 거부하거나 거부 된 약속을 이행해도 효과가 없습니다.
이 예제 스 니펫은 약속이 거부 된 후에도 이행되었지만 거부 된 상태임을 보여줍니다.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
resolve(numerator / denominator);
});
}
divide(5,0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
그렇다면 왜 돌아와야합니까?
확정 된 약속 상태를 변경할 수는 없지만 거부하거나 해결해도 나머지 기능의 실행은 중지되지 않습니다. 이 함수에는 혼란스러운 결과를 생성하는 코드가 포함될 수 있습니다. 예를 들면 다음과 같습니다.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
함수에 지금 그러한 코드가 포함되어 있지 않더라도 앞으로 가능한 함정이 생길 수 있습니다. 향후 리 팩터는 약속이 거부 된 후에도 코드가 여전히 실행되어 디버그하기 어렵다는 사실을 무시할 수 있습니다.
해결 / 거부 후 실행 중지 :
이것은 표준 JS 제어 흐름입니다.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return;
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
- 로 돌아 가기
resolve
/ reject
- 콜백의 반환 값이 무시되기 때문에, 우리는이 / 해결 문을 거부 반환하여 선을 절약 할 수 있습니다 :
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
return reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
} else {
console.log('operation succeeded');
resolve(numerator / denominator);
}
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
return
코드가 더 평평 하므로 옵션 중 하나를 사용하는 것을 선호합니다 .