Promise의 불완전한 시갱 기록
Promise
주로
Promise
에 대한 이해가 잘 안 되는 질문들을 기억해 주세요.resolve
또는 reject
의 코드 문제list:
resolve
이 된 후에 코드가 new Promise((resolve, reject) => {
resolve(233);
console.log('ahhh');
})
.then(data => console.log(data));
//ahhh
//2333
을 실행할 것인가답은 운행하는 것이다.
resolve
이 된 후에 동기화 오류가 new Promise((resolve, reject) => {
resolve(233);
JSON.parse('[22342343423');
})
.catch(err => console.log(err));
// no result;
을 던질까요결과적으로 아무런 오류도 나타나지 않는다
resolve
이 된 후에 resolve
또는 reject
을 진행하면 어떤 변화가 있는지 new Promise((resolve, reject) => {
resolve(233);
resolve(474748484);
reject('err');
})
.then(data => console.log(data))
.catch(err => console.log(err));
//233
결과는 아무런 변화가 없을 거예요.resolve
이 된 후에 비동기 코드가 틀리면 new Promise((resolve, reject) => {
resolve(233);
setTimeout(() => JSON.parse('[23313212'), 0);
})
.then(data => console.log(data))
.catch(err => console.log(err));
//233
//Uncaught SyntaxError: Unexpected end of JSON input
이번 비동기적인 투매는 투매될 것이다.그리고 Promise.then 이후resolve
이전에 동기화 오류 코드 new Promise((resolve, reject) => {
JSON.parse('[23423432');
console.log(32423423);
resolve(233);
})
.then(data => cosole.log(data))
.catch(err => console.log(err));
//SyntaxError: Unexpected end of JSON input
catch가 오류를 포착하고 다음 코드를 실행하지 않습니다resolve
전에 비동기적으로 잘못된 코드가 있으면 new Promise((resolve, reject) => {
setTimeout(() => JSON.parse('[2312312'), 0);
resolve(233);
})
.then(data => console.log(data))
.catch(err => console.log(err));
//233
//Uncaught SyntaxError: Unexpected end of JSON input
일단 Resolve를 하고 오류를 포착할 수 없어요.resolve
이후 오류 new Promise((resolve, reject) => {
setTimeout(() => resolve(233), 0);
JSON.parse('[324234');
})
.then(data => console.log(data))
.catch(err => console.log(err));
//SyntaxError: Unexpected end of JSON input
오류를 포착하면 비동기적인 Resolve를 실행하지 않습니다new Promise((resolve, reject) => {
setTimeout(() => resolve(233), 0);
setTimeout(() => JSON.parse('[43535'), 0);
})
.then(data => console.log(data))
.catch(err => console.log(err));
//233
//Uncaught SyntaxError: Unexpected end of JSON input
결론은 먼저then을 하고 전체적인 미포착 오류를 던지는 거예요.new Promise((resolve, reject) => {
setTimeout(() => resolve(233), 1000);
setTimeout(() => JSON.parse('[232432'), 0);
})
.then(data => console.log(data))
.catch(err => console.log(err));
//Uncaught SyntaxError: Unexpected end of JSON input
//233
여기는 둘 다 비동기적이기 때문에 서로 막히지 않기 때문에 Resolve에 영향을 주지 않습니다new Promise((resolve, reject) => {
let date = new Date().getTime();
// 3s
while((new Date()).getTime() - date < 3000)
resolve(233);
})
.then(data => console.log(data));
console.log('ahhh');
// 3s
//ahhh
//233
주 루틴을 막고 then은 다음 이벤트 순환에서 실행됩니다개인 결론:
Promise
안에 하나의 상자가 있고 그 다음에 상자의 운행은 동기화된다. 안에 먼저 resolve
또는 reject
을 되돌려주면 이 상자는 뒤의 운행을 상관하지 않고 resolve
또는 reject
의 값을 되돌려주고 상태를 padding
에서 resolved
또는 rejected
으로 바꾼다.비동기적인 측면에서 볼 때 모두 비동기적인 것이기 때문에 막히는 것이 존재하지 않는다. 그래서 비동기 안에서 resolve
또는 reject
을 호출하면 되돌아오는 값을 얻을 수 있다. 그러나 비동기적인 다른 문제는 이 상자 관리에 속하지 않는다. 이것이 바로 다음 사건의 순환이다. 상자는 지난 사건에서 이미 집행되었다.물론 resolve
이나 reject
이 돌아오지 않았기 때문에 padding
상태이며 다른 reject
이나 resolve
이 비동기적인 사건에서 돌아오기를 기다리고 있다.물론 현재 async await의 시대에 Promise 약low에 대해 이야기하고 있지만 Promise의 일부 용법을 이해하고 싶습니다. 부적절한 점이 있으면 지적해 주십시오. 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.