복붙노트

[NODEJS] 어떻게 체인 및 공유 이전 결과 약속에 [중복]

NODEJS

어떻게 체인 및 공유 이전 결과 약속에 [중복]

해결법


  1. 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
    });
    
  2. from https://stackoverflow.com/questions/28714298/how-to-chain-and-share-prior-results-with-promises by cc-by-sa and MIT license