웹페이지의 상호작용은 점점 더 복잡해지고 있으며 JavaScript에는 점점 더 많은 비동기 작업이 포함됩니다. 예를 들어, 일반적인 Ajax 요청에는 요청이 완료될 때 응답 작업이 필요합니다. 요청 프로세스 중에 사용자는 페이지를 차단하지 않고 다른 작업을 수행할 수도 있습니다. 친숙한. 하지만 개발자 입장에서는 이런 종류의 작업을 대량으로 처리하는 것이 매우 비우호적입니다. 비동기식 요청으로 완료된 작업은 콜백 함수에 미리 정의되어 있어야 하며, 요청이 완료되면 이 함수를 호출해야 합니다. 이러한 비선형 비동기 프로그래밍 방식은 개발자를 매우 불편하게 만들 뿐만 아니라 많은 불편을 초래하고 코드의 결합성과 복잡성을 증가시키며 코드 구성도 매우 우아하지 않아 코드의 효율성을 크게 떨어뜨립니다. . 유지보수성. 상황은 더 복잡합니다. 작업이 수행되기 전에 여러 비동기 Ajax 요청이 완료될 때까지 기다려야 하는 경우 여러 수준을 중첩해야 하는 경우 축복만 요청할 수 있습니다.
다음과 같은 일반적인 비동기 함수를 살펴보겠습니다.
함수에 콜백을 추가하려는 경우 일반적으로 이렇게 합니다.
easy.js의 Promise를 사용하는 경우 원래 함수를 Promise 인스턴스로 캡슐화해야 한다면 콜백을 추가하는 방법이 훨씬 더 우아해집니다.
코드는 다음과 같습니다.
then 메소드는 2개의 함수를 매개변수로 받아들이는데, 첫 번째 함수는 완료된 콜백이고 두 번째 함수는 실패한 콜백입니다.
위에 언급된 Ajax 요청이 여러 개 있으면 어떻게 되나요? 그런 다음 when 메소드를 사용해야 합니다. 이 메소드는 여러 Promise 인스턴스를 매개변수로 허용할 수 있습니다.
requests.then(function( arg1, arg2 ){
console.log( 'success:' arg1[0] arg2[0] );
}, function( arg1, arg2 ){
console.log( '실패:' arg1 arg2 );
});
When 메소드는 여러 개의 Promise 인스턴스를 배열에 저장하고, 완료된 콜백을 실행하기 전에 배열의 모든 Promise 인스턴스가 완료될 때까지 기다리는 것입니다. 한 인스턴스가 거부되면 즉시 거부된 콜백을 실행합니다.
Promise 패턴은 CommonJS의 사양 중 하나입니다. 많은 주류 JavaScript 라이브러리에는 이러한 기능을 구현하기 위해 연기된 jQuery 및 Dojo와 같은 해당 구현이 있습니다. 여기서 나는 여전히 jQuery의 Deferred에 대해 불평하고 싶습니다. 내부 사용에 관계없이 이 모듈은 사용자의 사용률이 가장 낮은 모듈이어야 합니다. 이는 더 복잡한 사용과 특정 관계가 있습니다.