>  Q&A  >  본문

제목을 다음과 같이 다시 작성합니다. 기존 콜백 API를 약속 형식으로 변환하는 방법은 무엇입니까?

<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>
P粉268654873P粉268654873425일 전376

모든 응답(2)나는 대답할 것이다

  • P粉618358260

    P粉6183582602023-08-22 16:14:21

    오늘은 일반적인 Javascript 방식으로 Node.js中使用Promise할 수 있습니다.

    간단하고 기본적인 Promise 예(KISS 방법 사용):

    NormalJavascript 비동기 API 코드:

    으아아아

    PromiseJavascript 비동기 API 코드:

    으아아아

    (이 훌륭한 소스를 방문하는 것이 좋습니다 )

    또한 Promise也可以与ES7中的asyncawait一起使用,使程序流程等待fulfilledES7asyncawait와 함께 사용하여 아래와 같이 프로그램 흐름이 fulfilled 결과를 ​​기다리도록 할 수도 있습니다.

    으아아아

    동일한 코드를 사용하여 .then() 메소드를 사용할 수 있습니다:

    으아아아

    Promise也可以在任何基于Node.js的平台上使用,比如react-nativereact-native와 같은 모든 Node.js 기반 플랫폼에서도 사용할 수 있습니다.

    Bonus: mixingmethod
    (콜백 메소드에 error와 result라는 두 개의 매개변수가 있다고 가정)

    으아아아

    위 메서드는 이전 스타일 콜백과 Promise 사용 결과 모두에 응답할 수 있습니다.

    도움이 되기를 바랍니다.

    회신하다
    0
  • P粉680087550

    P粉6800875502023-08-22 11:07:09

    Promise에는 상태가 있으며 보류 상태에서 시작하고 다음과 같이 해결될 수 있습니다.

    • Implemented는 계산이 성공적으로 완료되었음을 의미합니다.
    • Rejected는 계산이 실패했음을 의미합니다.

    Promise를 반환하는 함수 는 예외를 발생시켜서는 안 되며 대신 거부를 반환해야 합니다. 약속을 반환하는 함수에서 예외를 발생시키면 } catch { } catch { .catch .catch를 모두 사용해야 합니다. 약속 기반 API를 사용하는 사람들은 약속이 예외를 발생시키는 것을 원하지 않습니다. JS에서 비동기 API가 어떻게 작동하는지 잘 모르겠다면 먼저 이 답변을 확인하세요

    .

    1. DOM 로딩 또는 기타 일회성 이벤트:

    .then 따라서 Promise를 생성한다는 것은 일반적으로 해결 시기를 지정하는 것을 의미합니다. 즉, 이행 또는 거부 단계로 이동하여 데이터를 사용할 수 있음을 나타냅니다(그리고

    를 사용하여 액세스할 수 있음).

    Promise생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요.

    으아아아

    다음과 같이 생성된 Promise를 사용할 수 있습니다:

    으아아아

    지연을 지원하는 라이브러리를 사용하세요(여기에서는 $q를 예로 사용하지만 나중에 jQuery도 사용하겠습니다):

    으아아아

    또는 jQuery와 유사한 API를 사용하여 한 번 발생하는 이벤트에 연결합니다.

    으아아아

    2. 일반 콜백:

    JS에서는 콜백이 일반적이기 때문에 이러한 API는 매우 일반적입니다. 일반적인 상황을 살펴보겠습니다 onSuccessonFail:

    으아아아

    생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요. Promise 으아아아

    지연을 지원하는 라이브러리를 사용하세요(여기서는 jQuery를 예로 사용했지만 이전에는 $q도 사용했습니다):

    으아아아

    jQuery는 아래와 같이

    형식의 표현식도 제공합니다. $.Deferred(fn)形式,它的优点是允许我们编写一个非常接近new Promise(fn) 으아아아

    참고: 여기서는 jQuery의 지연된

    메서드가 "분리 가능"하다는 사실을 활용합니다. 즉, jQuery.Deferred()의 resolvereject 인스턴스 에 바인딩되어 있습니다. 모든 라이브러리가 이 기능을 제공하는 것은 아닙니다.

    3. 노드 스타일 콜백("nodeback"):

    노드 스타일 콜백(노드백)에는 콜백이 항상 마지막 인수이고 첫 번째 인수가 오류인 특정 형식이 있습니다. 먼저 수동으로 Promise로 변환하세요:

    으아아아

    다음으로 변환:

    으아아아

    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
    • 회신하다
      0
  • 취소회신하다