P粉6183582602023-08-22 16:14:21
오늘은 일반적인 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 사용 결과 모두에 응답할 수 있습니다.
도움이 되기를 바랍니다.
P粉6800875502023-08-22 11:07:09
Promise에는 상태가 있으며 보류 상태에서 시작하고 다음과 같이 해결될 수 있습니다.
Promise를 반환하는 함수 는 예외를 발생시켜서는 안 되며 대신 거부를 반환해야 합니다. 약속을 반환하는 함수에서 예외를 발생시키면 } catch {
} catch {
和 .catch
및 .catch
를 모두 사용해야 합니다. 약속 기반 API를 사용하는 사람들은 약속이 예외를 발생시키는 것을 원하지 않습니다. JS에서 비동기 API가 어떻게 작동하는지 잘 모르겠다면 먼저 이 답변을 확인하세요
.then
따라서 Promise를 생성한다는 것은 일반적으로 해결 시기를 지정하는 것을 의미합니다. 즉, 이행 또는 거부 단계로 이동하여 데이터를 사용할 수 있음을 나타냅니다(그리고
Promise
생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요.
다음과 같이 생성된 Promise를 사용할 수 있습니다:
으아아아지연을 지원하는 라이브러리를 사용하세요(여기에서는 $q를 예로 사용하지만 나중에 jQuery도 사용하겠습니다):
으아아아또는 jQuery와 유사한 API를 사용하여 한 번 발생하는 이벤트에 연결합니다.
으아아아JS에서는 콜백이 일반적이기 때문에 이러한 API는 매우 일반적입니다. 일반적인 상황을 살펴보겠습니다 onSuccess
和onFail
:
생성자를 지원하는 최신 Promise 구현(네이티브 ES6 Promise와 같은)을 사용하세요. Promise
으아아아
으아아아
jQuery는 아래와 같이 형식의 표현식도 제공합니다. $.Deferred(fn)
形式,它的优点是允许我们编写一个非常接近new Promise(fn)
으아아아
메서드가 "분리 가능"하다는 사실을 활용합니다. 즉, jQuery.Deferred()의 resolve
和reject
인스턴스 에 바인딩되어 있습니다. 모든 라이브러리가 이 기능을 제공하는 것은 아닙니다.
으아아아
다음으로 변환:으아아아
defer를 사용하여 다음을 수행할 수 있습니다(Q를 예로 사용했지만 이제 Q는 새로운 구문을 지원합니다해당 구문을 선호해야 합니다 ): 으아아아
일반적으로 수동으로 너무 많이 Promise로 변환하면 안 됩니다. Node용으로 설계된 대부분의 Promise 라이브러리와 Node 8+의 기본 Promise에는 노드백을 Promise로 변환하는 내장 메서드가 있습니다. 예를 들어으아악
여기에는 황금률이 없습니다. 하나씩 약속으로 변환할 수 있습니다. 그러나 일부 Promise 구현에서는 이 작업을 일괄적으로 수행할 수 있습니다. 예를 들어 Bluebird에서 노드백 API를 Promise API로 변환하는 것은 다음과 같이 간단합니다.
으아악또는 Node에서 native Promise를 사용하세요.
으아악참고:
.then
处理程序中时,当然不需要将事物转换为承诺。从.then
处理程序返回一个承诺将使用该承诺的值解决或拒绝。从.then
onload
情况中,您应该使用addEventListener
而不是onX