제목을 다음과 같이 다시 작성합니다. 기존 콜백 API를 약속 형식으로 변환하는 방법은 무엇입니까?
P粉268654873
2023-08-21 18:34:55
<p>Promise를 사용하여 처리하고 싶지만 콜백 API의 형식은 다음과 같습니다. </p>
<h3>1. DOM 로딩 또는 기타 일회성 이벤트: </h3>
<pre class="brush:php;toolbar:false;">window.onload; // 콜백 함수로 설정
...
window.onload = 함수() {
};</pre>
<h3>2. 일반 콜백 함수: </h3>
<pre class="brush:php;toolbar:false;">함수 요청(onChangeHandler) {
...
}
요청(함수() {
// 변경됨
...
});</pre>
<h3>3. 노드 스타일 콜백 함수("nodeback"): </h3>
<pre class="brush:php;toolbar:false;">function getStuff(dat, 콜백) {
...
}
getStuff("dataParam", function(err, data) {
...
})</pre>
<h3>4. 전체 라이브러리는 노드 스타일 콜백 함수를 사용합니다: </h3>
<pre class="brush:php;toolbar:false;">API;
API.one(함수(err, 데이터) {
API.two(함수(err, data2) {
API.two(함수(err, data3) {
...
});
});
});</pre>
<h3>이 API를 처리하기 위해 약속을 어떻게 사용하고 어떻게 "약속"합니까? </h3>
오늘은 일반적인 Javascript 방식으로
Node.js
中使用Promise
할 수 있습니다.간단하고 기본적인
Promise
예(KISS 방법 사용):NormalJavascript 비동기 API 코드:
으아아아
으아아아Promise
Javascript 비동기 API 코드:(이 훌륭한 소스를 방문하는 것이 좋습니다 )
또한
으아아아Promise
也可以与ES7
中的asyncawait
一起使用,使程序流程等待fulfilled
를ES7
의asyncawait
와 함께 사용하여 아래와 같이 프로그램 흐름이fulfilled
결과를 기다리도록 할 수도 있습니다.동일한 코드를 사용하여
으아아아.then()
메소드를 사용할 수 있습니다:Promise
也可以在任何基于Node.js的平台上使用,比如react-native
react-native
와 같은 모든 Node.js 기반 플랫폼에서도 사용할 수 있습니다.Bonus: mixingmethod
으아아아(콜백 메소드에 error와 result라는 두 개의 매개변수가 있다고 가정)
위 메서드는 이전 스타일 콜백과 Promise 사용 결과 모두에 응답할 수 있습니다.
도움이 되기를 바랍니다.
Promise에는 상태가 있으며 보류 상태에서 시작하고 다음과 같이 해결될 수 있습니다.
Promise를 반환하는 함수 는 예외를 발생시켜서는 안 되며 대신 거부를 반환해야 합니다. 약속을 반환하는 함수에서 예외를 발생시키면
.} catch {
} catch {
和.catch
및.catch
를 모두 사용해야 합니다. 약속 기반 API를 사용하는 사람들은 약속이 예외를 발생시키는 것을 원하지 않습니다. JS에서 비동기 API가 어떻게 작동하는지 잘 모르겠다면 먼저 이 답변을 확인하세요.then
따라서 Promise를 생성한다는 것은 일반적으로 해결 시기를 지정하는 것을 의미합니다. 즉, 이행 또는 거부 단계로 이동하여 데이터를 사용할 수 있음을 나타냅니다(그리고Promise
생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요.다음과 같이 생성된 Promise를 사용할 수 있습니다:
으아아아지연을 지원하는 라이브러리를 사용하세요(여기에서는 $q를 예로 사용하지만 나중에 jQuery도 사용하겠습니다):
으아아아또는 jQuery와 유사한 API를 사용하여 한 번 발생하는 이벤트에 연결합니다.
으아아아2. 일반 콜백:
JS에서는 콜백이 일반적이기 때문에 이러한 API는 매우 일반적입니다. 일반적인 상황을 살펴보겠습니다
으아아아onSuccess
和onFail
:생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요.
지연을 지원하는 라이브러리를 사용하세요(여기서는 jQuery를 예로 사용했지만 이전에는 $q도 사용했습니다):Promise
으아아아으아아아
jQuery는 아래와 같이형식의 표현식도 제공합니다.
참고: 여기서는 jQuery의 지연된$.Deferred(fn)
形式,它的优点是允许我们编写一个非常接近new Promise(fn)
으아아아메서드가 "분리 가능"하다는 사실을 활용합니다. 즉, jQuery.Deferred()의
3. 노드 스타일 콜백("nodeback"):resolve
和reject
인스턴스 에 바인딩되어 있습니다. 모든 라이브러리가 이 기능을 제공하는 것은 아닙니다.으아아아
다음으로 변환:으아아아
defer를 사용하여 다음을 수행할 수 있습니다(Q를 예로 사용했지만 이제 Q는 새로운 구문을 지원합니다해당 구문을 선호해야 합니다 ): 으아아아
일반적으로 수동으로 너무 많이 Promise로 변환하면 안 됩니다. Node용으로 설계된 대부분의 Promise 라이브러리와 Node 8+의 기본 Promise에는 노드백을 Promise로 변환하는 내장 메서드가 있습니다. 예를 들어으아악
4. 전체 라이브러리는 노드 스타일 콜백을 사용합니다.
여기에는 황금률이 없습니다. 하나씩 약속으로 변환할 수 있습니다. 그러나 일부 Promise 구현에서는 이 작업을 일괄적으로 수행할 수 있습니다. 예를 들어 Bluebird에서 노드백 API를 Promise API로 변환하는 것은 다음과 같이 간단합니다.
으아악또는 Node에서 native Promise를 사용하세요.
으아악참고:
.then
处理程序中时,当然不需要将事物转换为承诺。从.then
处理程序返回一个承诺将使用该承诺的值解决或拒绝。从.then
onload
情况中,您应该使用addEventListener
而不是onX