찾다

 >  Q&A  >  본문

약속의 가치를 어떻게 얻을 수 있나요?

<p><code>$q</code>의 예에 대한 Angular 문서를 보고 있었지만 일반적으로 Promise에 대해서는 이것이 효과가 있을 것이라고 생각했습니다. 아래 예는 설명을 포함하여 해당 문서에서 직접 복사한 것입니다. </p> <pre class="brush:php;toolbar:false;">promiseB = promiseA.then(function(result) { 결과 + 1을 반환합니다. }); // promiseA가 해결되면 promiseB가 즉시 해결되고 해당 값은 promiseA에 1</pre>을 더한 결과가 됩니다. <p>이게 어떻게 작동하는지 잘 모르겠습니다. 첫 번째 <code>.then()</code>의 결과에 대해 <code>.then()</code>을 호출하여 이를 함께 연결할 수 있다면 그렇게 할 수 있다는 것을 압니다. ;code>promiseB는 Object 유형의 Promise 객체입니다. <코드>번호</code>가 아닙니다. 그렇다면 "그 값은 promiseA에 1을 더한 결과가 될 것입니다"라는 말은 무엇을 의미할까요? </p> <p><code>promiseB.value</code>처럼 액세스해야 하나요? 성공 콜백은 어떻게 약속을 반환하고 "결과 + 1"을 반환할 수 있나요? 나는 뭔가를 놓치고 있습니다. </p>
P粉116631591P粉116631591469일 전455

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

  • P粉616111038

    P粉6161110382023-08-22 12:43:32

    프라미스가 해결/거부되면 성공/오류 핸들러를 호출합니다.

    으아아아

    then 메소드는 또한 promiseA의 성공/오류 핸들러의 반환 값에 따라 해결/거부될 promiseB를 반환합니다.

    promiseA의 성공/오류 핸들러는 promiseB의 결과에 영향을 미치는 세 가지 가능한 값을 반환할 수 있습니다.

    1. 값을 반환하지 않음 → promiseB는 즉시 확인되고 정의되지 않은 값이 promiseB의 성공 핸들러로 전달됩니다.
    2. 값을 반환 → promiseB는 즉시 확인되고 값은 promiseB의 성공 핸들러로 전달됩니다.
    3. Promise 반환 → Promise가 해결되면 promiseB가 해결됩니다. Promise가 거부되면 PromiseB도 거부됩니다. promiseB의 핸들러에 전달된 값은 promise
    4. 의 결과가 됩니다.

    이러한 이해를 통해 다음을 이해할 수 있습니다.

    으아아아

    그런 다음 호출은 즉시 promiseB를 반환합니다.

    promiseA가 해결되면 결과가 promiseA의 성공 핸들러에 전달됩니다.

    반환 값은 promiseA의 결과 + 1이고 성공 핸들러는 값(위의 옵션 2)을 반환하므로 promiseB는 즉시 해결되고 promiseB의 성공 핸들러는 promiseA의 결과 + 1이 전달됩니다.

    회신하다
    0
  • P粉155128211

    P粉1551282112023-08-22 00:10:42

    promiseAthen函数返回一个新的promise(promiseB),在promiseA解决后立即解决,其值是在promiseA의 성공 함수에서 반환된 값입니다.

    이 경우에는 promiseA解决为一个值-result,然后立即使用result + 1的值解决promiseB.

    같은 방식으로 promiseB的值与访问promiseA의 결과에 액세스합니다.

    으아아아

    ECMAScript 2016(ES7, 2016)부터 async/await는 JavaScript의 표준이 되어 위 접근 방식에 대한 대체 구문을 허용합니다. 이제 다음과 같이 쓸 수 있습니다:

    으아아아

    이제 await를 사용하여 promiseA의 결과를 풀고 직접 사용할 수 있으므로 promiseB가 없습니다.

    그러나 await只能在asyncasync 함수 내에서만 사용할 수 있습니다. 따라서 조금 확대하면 위 코드가 함수 내에 포함되어야 합니다.

    으아아아

    분명히 말하자면, 이 예에서는 doSomething函数的返回值仍然是一个promise,因为async函数返回的是promise。所以如果你想要访问返回值,你需要使用result = await doSomething() 다른 비동기 함수 내에서만 사용할 수 있습니다. 기본적으로 상위 비동기 컨텍스트에서는 하위 비동기 컨텍스트에서 생성된 값에 직접 액세스할 수 있습니다.

    회신하다
    0
  • 취소회신하다