예를 들어, 비동기식 A.func1()이 있고 x1 객체를 반환할 수 있습니다. 또한 비동기식이며 x1을 기반으로 실행해야 하는 B.func2()도 있고 그 다음에는 B가 있습니다. .func2는 최종 값 t를 반환하며, 이 최종 값 t를 기반으로 일부 프롬프트 표시가 수행됩니다. 이건 어떻게 써야 하나요?
제가 직접 작성한 코드는 이렇습니다
"Promise 연속 호출 중 상태 저장"에 대한 댓글의 보충 댓글에 대해 몇 가지 전략을 자세히 설명하고 싶습니다
최고의 전략: De-statement
즉, A.func1, B.func2 및 익명 함수(func3이라고 함)의 호출 프로세스에 상태가 포함되지 않도록 논리를 조정합니다. 즉, func3이 func2의 출력에만 의존하고 그렇지 않은 경우 func1의 출력. 또는 func2가 func1에 의존하지 않도록 하려면 Promise.all과 같은 것을 사용하여 func1과 func2의 결과를 동시에 가져와 func3Promise.all来同时拿到func1和func2的结果丢给func3
"Promise 연속 호출 중 상태 저장"에 대한 댓글의 보충 댓글에 대해 몇 가지 전략을 자세히 설명하고 싶습니다
최고의 전략: De-statement
즉, A.func1, B.func2 및 익명 함수(func3이라고 함)의 호출 프로세스에 상태가 포함되지 않도록 논리를 조정합니다. 즉, func3이 func2의 출력에만 의존하고 그렇지 않은 경우 func1의 출력. 또는 func2가 func1에 의존하지 않도록 하려면
Promise.all
과 같은 것을 사용하여 func1과 func2의 결과를 동시에 가져와 func3Promise.all
来同时拿到func1和func2的结果丢给func3中策:“全局”变量维护状态
优点:state可扩展state.x2 .x3 ...
问题:很长的调用链带复杂状态的话,很容易污染出bug,代码可维护性下降严重
중앙 전략: "전역" 변수가 상태를 유지합니다bluebird
에 넣으세요.문제: 긴 호출 체인의 상태가 복잡하면 버그가 오염되기 쉽고 코드의 유지 관리성이 심각하게 저하됩니다
으아아아
bluebird
의 바인딩 메서드는 thisArg에 바인딩될 수 있으며 상태를 유지하는 데 사용될 수 있습니다.으아아아
선택 : 임시추가배송단점: 긴 호출 체인의 각 단계에 상태가 있으면 매우 장황해집니다
으아아아물론 여기의 내부도 직접 캡슐화하여 최적화할 수 있습니다
으아아아 🎜마지막 해결 방법: 폐쇄 유지 관리 상태🎜 🎜사실 이게 원래 질문을 쓰는 방식인데, 질문이 원래의 "콜백 지옥"으로 다시 다운그레이드 되었거나 콜백 피라미드의 당혹스러움이 있다는 점이 가장 큰 문제인 것 같아요🎜 🎜장점은...효과가 있다는 것입니다🎜 으아아아다음과 같이
then
에서 직접Promise
객체를 반환합니다.then
里面返回一个Promise
的对象,如下:针对你评论中说的问题,如果不使用第三方的
Promise
库的话,可以像下面这样使用:使用第三方的
귀하의 댓글에 언급된 문제에 대해 타사Promise
으아아아Promise
라이브러리를 사용하지 않는 경우 다음과 같이 사용할 수 있습니다. 🎜 으아아아 🎜타사Promise
라이브러리를 사용하면 이 프로세스를 단순화할 수 있습니다. 🎜promise는 Promise 객체를 반환하므로 우아한 연쇄 호출을 사용할 수 있습니다.
then의 함수 반환 값이 직접 수량인 경우 다음 체인 호출에서 then의 매개 변수로 사용됩니다.
으아악반환 값에 promise의 인터페이스가 있는 경우 promise의 해결 결과는 다음과 같습니다.
q를 예로 사용