Promise가 무엇인지 대중적인 설명

약속이란 무엇입니까?

Promise 영어 번역은 약속, 약속을 의미합니다. 그 기능은 중국의 의미와 같으며 약속입니다.

MDN의 설명 :
Promise 개체는 프록시 개체 (프록시 값)이며 Promise 개체가 생성 될 때 프록시 개체의 값을 알 수 없습니다. 비동기 작업의 성공 및 실패에 대해 해당 처리 방법 (핸들러)을 바인딩 할 수 있습니다. 이를 통해 비동기 메서드는 동기 메서드와 같은 값을 반환 할 수 있지만 최종 실행 결과를 즉시 반환하는 대신 향후 결과를 나타낼 수있는 promise 객체입니다.

너무 많이 말했지만 실제로는 언어로 번역됩니다.
1. 며느리가 배가 고파서 먹어야하므로 음식을 사러 길거리에 가고 싶습니다 ( 비동기 방식 )
2. 그녀는 언제인지 모릅니다. 나는 음식을 사서 돌아올 것이다 ( 비동기 방식은 몇 초 동안 실행될 것이다 ).
3. 그러나 음식을 사서 집에 돌아온 후에는 며느리가 먹을 수 있도록 돼지 갈비찜을 만들 것이다 . 비동기 메서드가 실행되고 반환 값을 처리
해야합니다 .) 이 때 내가 무엇을해야하는지, 약속을 사용할 것입니다 : 이건
말만 해주세요 이거 내놔, 쇼핑하러 가겠다 고 약속 해요. 곧 돼지 갈비 내가 그것을 구입 완료로, 나는 즉시 완료로 먹고 전화한다 (이 장소는 동일합니다 약속 체인 호출 ), 당신은 지금 무엇을하고 있는지? 당신은 (Douyin와 함께 게임을 즐길 수 있습니다 않습니다 다른 코드의 호출에 영향을 미치지 않습니다 ).

Promise에는 다음 상태가 있습니다.
보류 중 : 초기 상태, 성공 또는 실패 상태가 아님 (음식을 사러 나갔고, 당신은 내가 돌아올 때까지 기다리 셨습니다)
이행 됨 : 작업이 성공적으로 완료되었음을 의미합니다. (음식을 사서 집에 가서 며느리에게 먹고 싶은 음식이 있다고 말 해주세요)
거부 됨 : 수술이 실패했음을 의미합니다. (음식을 못 받았는데 테이크 아웃 주문 해주시 겠어요)

보류 상태의 Promise 객체는 이행 상태로 변경되어 해당 상태 처리 방법에 값을 전달하거나 실패 상태 (거부 됨)로 변경되어 실패 정보를 전달할 수 있습니다. 이러한 상황 중 하나가 발생하면 Promise 개체의 then 메서드에 바인딩 된 처리기가 호출됩니다.
then 메소드에는 onfulfilled 및 onrejected라는 두 개의 매개 변수가 포함되며 둘 다 Function 유형입니다. Promise 상태가 충족되면 then의 onfulfilled 메소드가 호출되고 Promise 상태가 거부되면 then의 onrejected 메소드가 호출되므로 비동기 작업 완료와 바인딩 처리 방법 사이에 경쟁이 없습니다.
여기에 사진 설명 삽입

기본적인 예를보십시오.

            new Promise((resolve, reject) => {
                console.log('code begin !');
                 let num = 4;
                // 假装执行一个异步方法
                setTimeout(() => {
                    console.log('async begin !');
                    num += 2;
                    // 把Promise状态设为fulfilled,并把结果传递出去
                    resolve(num);
                    // 把Promise状态设为rejected,并把失败信息传递出去
                    //reject('promise被手动中止');
                    // throw 'uncaught exception!'; // 这里要注意,catch无法捕获在异步方法里抛出的异常
                }, 1000);
            }).then((result) => { // 当Promise的状态被设为接受(fulfilled)时执行
                console.log('fulfilled :' + result);
            }, (reason) => { // 当Promise的状态被设为拒绝(rejected)时执行
                console.log('rejected :' + reason);
            }).catch((error) => { 
                console.log('error :' + error);
            }).finally(() => {
                // do something !
            });
                

then 메서드는 Promise를 반환합니다. Promise의 성공과 실패를위한 콜백 함수는 최대 두 개의 매개 변수가 필요합니다.

catch 메서드는 실행 프로세스에서 예외가 발생하거나 Promise 상태가 실패 (거부 됨)로 설정되어 있고 거부 된 실행 기능이 설정되지 않은 경우에 실행됩니다. 또한 catch는 비동기 메서드에서 throw 된 예외를 catch 할 수 없습니다.

finally 메소드는 promise의 최종 상태를 알 수 없으므로 finally 콜백 함수는 매개 변수를받지 않으며 최종 결과에 관계없이 실행시에만 사용됩니다.

또한 Promise를 체인으로 호출 할 수 있으며 then 메서드의 실행이 종료되고 새로운 Promise가 반환되면 then 메서드가 순차적으로 실행됩니다. 그러나 여기에 한 가지주의 할 점이 있습니다 . 콜 체인에서 예외가 발생하거나 상태가 거부 됨으로 변경되면 나머지 콜 체인은 실행되지 않습니다. 따라서 체인 호출을 사용할 때주의하십시오!

코드 예 :

            new Promise((resolve, reject) => {
                console.log('code begin !');
                let num = 4;
                setTimeout(() => {
                    console.log('num + 2 = 6');
                    num += 2;
                    resolve(num);
                }, 1000);
            }).then((num) => {
                return new Promise((resolve, reject) => {
                    console.log('num * num = 36');
                    setTimeout(() => {
                        num *= num;
                        resolve(num);
                    }, 1000);
                });
            }).then((num) => {
                return new Promise((resolve, reject) => {
                    console.log('num + num = 72');
                    setTimeout(() => {
                        num += num;
                        resolve(num);
                    }, 1000);
                });
            }).then((result) => {
                console.log('fulfilled :' + result);
            }, (reason) => {
                console.log('rejected :' + reason);
            }).catch((error) => {
                console.log('error :' + error);
            }).finally(() => {
                // do something !
            });

여기에 사진 설명 삽입
Promise에는 Promise.all ( iterable ) 과 같은 다른 메소드가 있습니다. iterable (배열과 유사)을 전달할 수 있으며, iterable의 모든 promise가 실행될 때까지 기다렸다가 균일하게 반환됩니다. 반환 된 결과도 다음과 같습니다. 뒤에 오는 배열 매개 변수 내의 promise의 순서는 promise가 호출되는 순서에 의해 결정되지 않습니다.

	    Promise.all([mothod1(), mothod2()])
	         .then((result) => {
	             console.log('all complete');
	             console.log(result);
	         });
                
       function mothod1() {
            console.log('first mothod');
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('mothod1 complete');
                }, 2000);
            });
        }
        function mothod2() {
            console.log('second mothod');
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('mothod2 complete');
                }, 1000);
            });
        }

여기에 사진 설명 삽입

Promise.race ( iterable ) : iterable (배열과 유사)을 전달할 수 있습니다. iterable의 promise가 해결되거나 거부되면 promise가 해결되거나 거부됩니다.

			Promise.race([mothod1(), mothod2()])
                .then((result) => {
                    console.log(result);
                    console.log('complete');
                });

여기에 사진 설명 삽입

추천

출처blog.csdn.net/qq_41885871/article/details/103735447