>

var p3 = new Promise( function(resolve,reject){
  resolve( "B" );
});
var p1 = new Promise( function(resolve,reject){
  resolve( p3 );
});

위의 약속 생성 순서에 따라 누군가 다음 진술이 어떻게 같은 가치를 인쇄하는지 말해 줄 수 있습니다

설명 1 :

p1
    .then( ( p3promiseObj ) => p3promiseObj )
    .then( p3val => console.log( p3val ) )

출력:

B
Promise {<resolved>: undefined}

설명 2 :

p1.then((val)=>console.log(val))

출력:

B
Promise {<resolved>: undefined}

문장 1은 p1 로 이해됩니다.   p3promiseObj 로 해결  그런 다음 p3promiseObj 에서  우리는 해결 된 가치를 얻을 수 있습니다 .

문장 2는 "B" 를 얻는다  약속 된 가치, 해결 된 가치가 아니라 ... p3 를 어떻게 인쇄 하는가  Promise 객체 대신

"B"
  • 답변 # 1

    p1 때문이야  이미p3 로 해결됩니다. , 약속 실행자의 다음 줄 덕분에 :

    var p1 = new Promise( function(resolve,reject){
      resolve( p3 ); // <==========
    });
    
    

    와이즈 비즈 이후   p3 를 부르는 약속입니다  약속을 해결합니다 ( resolve(p3) ) p1 의 약속에 .

    <시간>

    '문 1'코드는 두 가지 방식으로 올바르지 않습니다 :

    <올>

    자바 스크립트 약속 구현은 약속을 전달하거나 p3 에 전달할 수 없습니다. . 대신 then 만 호출합니다.  약속이 이행 될 때 "  에 의해 수행되는 대신 해결되었습니다.

    then 에 대한 어떤 지적도 없다 .

  • 답변 # 2

    사양의 관련 부분은 다음과 같습니다.

    25.4.3.1 약속 (집행자) :

    와이즈 비즈 와이즈 비즈  실행 프로그램 함수에 전달 된 함수는 단일 인수를 허용합니다. 실행 코드는 결국 then 를 호출 할 수 있습니다.  관련 Promise 개체를 해결하려고 함을 나타냅니다. 논쟁은 .then(x => x) 에 전달  기능은 연기 된 조치의 최종 값을 나타내며실제 이행 값 또는 이행 될 경우 값을 제공하는 다른 Promise 오브젝트 일 수 있습니다.

    따라서 성취를 직접 전달하거나 약속을 전달할 수 있습니다. 약속 인 경우 약속이 가득 차 자마자 해당 약속의 전체 서류 값이 사용됩니다.

    The

    resolve 인 경우에도 작동합니다  거부 됨 :

    resolve
    
    

    유효한 객체가 Promise/A + 사양에 따라 구현되면 resolve  그때 이행 콜백의 첫 번째 인수는 항상 해결 된 값이므로 항상 의미가 없습니다.

  • 답변 # 3

    이것은 var p3 = new Promise(function(resolve, reject) { setTimeout(() => resolve("B"), 1000); }); var p1 = new Promise(function(resolve, reject) { resolve(p3); }); p1 .then(val => console.log(val)) 문에서 p3   var p3 = new Promise(function(resolve, reject) { setTimeout(() => reject(new Error("B")), 1000); }); var p1 = new Promise(function(resolve, reject) { resolve(p3); }); p1 .then(p3val => console.log('resolved to:' + p3val)) .catch(err => console.error('rejected:', err)) 값을 반환 . 그리고이 가치는 약속이 아니므로 다음 .then( ( p3promiseObj ) => p3promiseObj )  함수는 p1.then( ( p3promiseObj ) => p3promiseObj ) 를 반환합니다

    p3promiseObj
    
    

    B

  • 이전 angularjs - 지시문 속성을 제거해도 리스너가 제거되지 않습니다
  • 다음 javascript - angularjs - $emit/$on 또는 범위 상속 중 어느 것이 더 낫습니까?