[NODEJS] 어떻게 체인 및 공유 이전 결과 약속에 [중복]
NODEJS어떻게 체인 및 공유 이전 결과 약속에 [중복]
해결법
-
1.의존 약속과 그 다음에 하나의 데이터 전달에 대한 몇 가지 모델이 있습니다. 어느 가장 당신은 단지 다음 호출 여부 이전 데이터가 필요 여부에 따라 하나 개의 작품은 이전의 모든 데이터에 액세스 할 수 있어야합니다. 여기에 몇 가지 모델은 다음과 같습니다 :
의존 약속과 그 다음에 하나의 데이터 전달에 대한 몇 가지 모델이 있습니다. 어느 가장 당신은 단지 다음 호출 여부 이전 데이터가 필요 여부에 따라 하나 개의 작품은 이전의 모든 데이터에 액세스 할 수 있어야합니다. 여기에 몇 가지 모델은 다음과 같습니다 :
callhttp(url1, data1).then(function(result1) { // result1 is available here return callhttp(url2, data2); }).then(function(result2) { // only result2 is available here return callhttp(url3, data3); }).then(function(result3) { // all three are done now, final result is in result3 });
var r1, r2, r3; callhttp(url1, data1).then(function(result1) { r1 = result1; return callhttp(url2, data2); }).then(function(result2) { r2 = result2; // can access r1 or r2 return callhttp(url3, data3); }).then(function(result3) { r3 = result3; // can access r1 or r2 or r3 });
var results = {}; callhttp(url1, data1).then(function(result1) { results.result1 = result1; return callhttp(url2, data2); }).then(function(result2) { results.result2 = result2; // can access results.result1 or results.result2 return callhttp(url3, data3); }).then(function(result3) { results.result3 = result3; // can access results.result1 or results.result2 or results.result3 });
callhttp(url1, data1).then(function(result1) { // result1 is available here return callhttp(url2, data2).then(function(result2) { // result1 and result2 available here return callhttp(url3, data3).then(function(result3) { // result1, result2 and result3 available here }); }); })
체인의 일부가 다른 후 독립적으로하기보다는 하나를 진행 할 수있는 경우에, 당신은 개별적으로 실행하고 그 여러 조각이 완료되면 알고 Promise.all ()를 사용하면 다음 해당 독립적 인 조각의 모든 데이터를해야합니다 수 있습니다 :
var p1 = callhttp(url1, data1); var p2 = callhttp(url2, data2).then(function(result2) { return someAsync(result2); }).then(function(result2a) { return someOtherAsync(result2a); }); var p3 = callhttp(url3, data3).then(function(result3) { return someAsync(result3); }); Promise.all([p1, p2, p3]).then(function(results) { // multiple results available in results array // that can be processed further here with // other promises });
약속 체인 ES7에, 비동기 작업을 시퀀싱 단지 메커니즘이기 때문에, 당신은 또한 await를 사용하고 중간 결과 (체인화 그 때는 () 핸들러의 분리 된 범위보다 아마도 더 간단) 같은 범위에서 모두 사용할 수 있습니다
async function someFunction(...) { const r1 = await callhttp(url1, data1); // can use r1 here to formulate second http call const r2 = await callhttp(url2, data2); // can use r1 and r2 here to formulate third http call const r3 = await callhttp(url3, data3); // do some computation that has access to r1, r2 and r3 return someResult; } someFunction(...).then(result => { // process final result here }).catch(err => { // handle error here });
from https://stackoverflow.com/questions/28714298/how-to-chain-and-share-prior-results-with-promises by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] 어떤 범위에서 모듈 변수는 Node.js를에 저장됩니다? (0) | 2020.09.16 |
---|---|
[NODEJS] 그것은 사용하는 비동기에 대한 안티 패턴 / await를 내 새로운 약속 () 생성자의인가? (0) | 2020.09.16 |
[NODEJS] 중포 기지 용 클라우드 기능으로 업로드 된 파일에서 다운로드 URL 받기 (0) | 2020.09.16 |
[NODEJS] 없음 '액세스 제어 - 허용 - 원산지'- 노드 / 아파치 포트 문제 (0) | 2020.09.16 |
[NODEJS] 거부에 전달하지 체인 약속 (0) | 2020.09.16 |