반환값과 Promise.resolve의 차이점은 무엇입니까?
다음 중 어떤 차이가 있습니까?
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return "bbb";
})
.then(function(result) {
console.log(result);
});
또, 이하와 같이 됩니다.
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return Promise.resolve("bbb");
})
.then(function(result) {
console.log(result);
});
Chaining .then()을 사용하는 Angular와 $http 서비스를 사용하는 행동이 달라지고 있어 물어봅니다.코드가 너무 많아서 먼저 위의 예를 보겠습니다.
간단하게 말하면,then다음 중 하나:
A)의 경우x입니다.이 경우, (수, 문자열 등)는 다음과 같습니다.
return xreturn Promise.resolve(x)throw xreturn Promise.reject(x)
을(를)의 경우x이미 결정된 약속입니다(더 이상 보류 중이 아님).
return xreturn Promise.resolve(x)(약속 ★★★★★★★★★★★★★★★★★★★★★★★★★★★」return xreturn Promise.reject(x)(약속 ★★★★★★★★★★★★★★★★★★★★★★★★★★★」
의 경우x"이것들"은 다음과 같습니다.
return x는 보류 Promise를 Promise, 즉 Promise가 됩니다.then
자세한 내용은 Promise.protype.then() 문서를 참조하십시오.
에 then하여 약속이 함수가 번 ""/"/"/"/"예약"이 then은 ""가 .then함수가 반환한 약속의 절, 따라서 이 경우 첫 번째 예는 정상 시퀀스의 다음 순서로 떨어집니다.thens에서는 약속 오브젝트를 할 때 합니다.두 번째 예에서는 값을 출력하면 반환되는 약속 오브젝트입니다.Promise.resolve("bbb") '는 ''가 됩니다then접속할 때 호출됩니다(모든 목적 및 목적).실제의 동작 방법에 대해서는, 이하에 자세하게 설명합니다.
Promise/A+ 사양에서 인용:
입니다.
[[Resolve]](promise, x)가 가능한 경우, x가 적어도 약속과 같은 행동을 한다는 가정 하에 약속이 의 상태를 채택하도록 시도합니다.그렇지 않으면 가치 있는 약속을 이행할 수 있습니다.x.이러한 테이블 처리를 통해 Promise/A+ 준거 방식을 공개하는 한 프로미스 구현을 상호 운용할 수 있습니다.또한 Promise/A+ 구현은 합당한 방법으로 부적합 구현을 "평가"할 수 있습니다.
여기서 주목해야 할 중요한 점은 다음과 같습니다.
x약속입니다.그 상태를 채택합니다[ 3 . 4 ]링크: https://promisesaplus.com/ #point-49
두 예 모두 거의 동일하게 동작해야 합니다.
" " " " " " " "then()는 그 약속에서 .then()이 .then입니다.이러한 은 '약속', '약속'에 반환됩니다.then()그 약속의 "상태를 변화시키고" 돌아온 약속과 마찬가지로 해결/해결합니다.
번째 예에서는 " "를 합니다."bbb" 처음에then() 즉 「」, 「」의"bbb"로 넘어갑니다.then()핸들러
예에서는 즉시 ."bbb", (그래서)"bbb"로 넘어갑니다.then())Promise.resolve()을 이용하다
결과는 똑같다.
실제로 다른 행동을 보이는 예를 보여주면 왜 그런 일이 일어나는지 설명해 드릴 수 있습니다.
당신은 이미 좋은 정식 답변을 받았습니다.짧게 하나 더 넣어야겠다고 생각했어요.
Promise/A+ 약속과 동일한 사항은 다음과 같습니다.
- " "
Promise.resolve( Angular 은 (Your Angular의경)))))))$q.when) - 약속 생성자를 호출하여 해결합니다.의 , ★★★★★★★★★★★★★★★★★★★★★★★★.
new $q. - 에서 값
then콜백 - 콜 프로미스값을 포함하는 배열에 모두 포함시킨 다음 해당 값을 추출합니다.
따라서 약속 또는 일반 값 X에 대해 다음 사항이 모두 동일합니다.
Promise.resolve(x);
new Promise(function(resolve, reject){ resolve(x); });
Promise.resolve().then(function(){ return x; });
Promise.all([x]).then(function(arr){ return arr[0]; });
또한 약속 사양은 라이브러리 간에 쉽게 상호 운용할 수 있도록 ($q와 네이티브 약속 등) 약속 해결 절차를 기반으로 하며 전반적인 생활을 편리하게 합니다.약속 해결이 발생할 수 있는 경우 항상 해결이 이루어지며 전체적인 일관성이 만들어집니다.
점이 있다면, '한 약속'을 할 때 '불필요한 것입니다.return Promise.resolve("bbb")onFulfilled()핸들러가 약속 해결을 시작합니다.그게 약속 체인이란 거야
그냥 포인트.디버거에서 볼 수 있듯이 '해결' 함수는 반환되지 않습니다.그것이 마지막 진술이면 되돌아오는 것처럼 보인다.'해결'은 약속이 가득 찬 것으로 설정되지만 아래 문장이 더 있을 경우 실행을 계속합니다.
여기서 알 수 있듯이 'javascript ES6 Promits는 왜 해결 후에도 실행을 계속합니까?'
이것은 대부분의 예에서 설명되지 않았기 때문에 나에게 매우 혼란스러웠다.따라서 앞으로는 'return resolve(value)' 또는 'if resolve(value) else...other code'를 사용하거나 'resolve'를 마지막 문장으로 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/27715275/whats-the-difference-between-returning-value-or-promise-resolve-from-then
'programing' 카테고리의 다른 글
| ExecuteNonQuery에서 영향을 받는 행을 가져옵니다. (0) | 2022.12.24 |
|---|---|
| 삽입처...모든 MySQL 열에 대해 선택 (0) | 2022.12.24 |
| 행잉 포인터와 메모리 누수의 차이 (0) | 2022.12.24 |
| URL 및 파일 이름을 안전하게 하기 위해 문자열을 삭제하시겠습니까? (0) | 2022.12.24 |
| Python에서의 Bash 명령어 실행 (0) | 2022.12.24 |