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에 따라 라이센스가 부여됩니다.