2017-02-20 2 views
0

문제를 재현하는이 수수께끼를보십시오. 3 & 4, 내가 JS 함수로 2 개 데이터 객체를 전달하고있어 두 시나리오의JS 스코핑 Q 약속 문제

JS Fiddle

function processMultistagePromiseBad(func1data, func2data) { 
    console.log("func1data:", func1data); 
    console.log("func2data:", func2data); 
    return work1(func1data) 
    .then(work2(func2data)); 
} 

// scenario 3 
processMultistagePromiseBad(data1, data2) 
.then((results) => { 
    console.log(results); 
    return results; 
}) 
.then((results) => scenario3.innerHTML += results + " <br />"); 

, 즉 약속 체인의 근무처 & 근무처 함수를 호출한다 : 문제는 시나리오 # 3에 . Work2는 두 시나리오에서 실행 중이지만 시나리오 3은 올바르게 반환되지 않습니다.

시나리오 4, 함수 선언을 추가하는 것이 예상대로 작동하는 중 ... ...? 팀

답변

1

그 때는이 돕는 값을 반환 핸들러 함수가 약속을 거부합니다/예외를 해결하기 위해 기대

덕분에, - 당신이 여기에 전달하는 것은 그 때는에 대한 약속이며 단순히 무시됩니다 .

가 참조 첫 번째 약속을 해결하기 위해 결과를 반환 - chaining promises

function processMultistagePromiseBad(func1data, func2data) { 
 
    console.log("func1data:", func1data); 
 
    console.log("func2data:", func2data); 
 
    return work1(func1data) 
 
    .then((result) => { 
 
     return work2(func2data); 
 
    }); 
 
}

편집 :

그런 다음 자신이 약속을 반환합니다. 해결/거부 함수의 반환 값은 새 약속으로 전달됩니다. 체인의 다음에이 값이 입력으로 사용됩니다. processMultistagePromiseBad에서 work1 (func1data)은 "I am data 1"이라는 확인 값으로 약속을 반환합니다. 그 다음에 (work2 (func2data)) 반환 값 "I am data 2"를 가진 새로운 약속을 반환하지 않습니다. 따라서 processMultistagePromiseBad는 다음 약속에 의해 다시 할당되지 않았으므로 첫 번째 약속 - "나는 데이터 1"을 반환합니다. 반면에 다국적 기업은 재 할당을 받아야합니다. 약속은 정말 혼란 스럽지만 우리가 비동기적인 것을 실행하고 싶을 때 편리합니다. 희망이 도움이 - MSDN documentation on then

+0

안녕 Sanjana, 제안 및 링크 주셔서 감사합니다. 또한 work2가 실행되는 이유에 대한 설명을 찾고 있지만 반환은 무시되며 대신 work1이 반환됩니다. 어떤 아이디어가 있습니까? JS 개발자가 쉽게 넘어 질 수있는 구멍이며, 실수를 저 지르지 않도록 더 많이 이해하고 싶습니다. – TimO

+0

편집을 참조하십시오. 이게 너를 돕기를 바란다. 그리고 그것이 제게 많은 도움이 되었기 때문에 의사를 살펴보십시오. –