6

で次のことを達成するためのネストの少ない方法はありますかrequest-promise:

r = require('request-promise');

r(url1).then(function(resp1) {
    // Process resp 1

    r(url2 + 'some data from resp1').then(function(resp2) {
        // Process resp 2
        // .....
    });
});

各リクエストは最後の結果に依存するため、連続している必要があります。ただし、私のロジックの中には、最大 5 つの連続した要求を必要とするものもあり、ネストされた悪夢を引き起こします。

私はこれについて間違っていますか?

4

1 に答える 1

10

Promiseに提供されているonFulfilled関数でa を返すことができますPromise.then

r = require('request-promise');

r(url1).then(function(resp1) {
    // Process resp 1
    return r(url2 + 'some data from resp1');
}).then(function(resp2) { 
    // resp2 is the resolved value from your second/inner promise
    // Process resp 2
    // .....
});

これにより、ネストされた悪夢に陥ることなく複数の呼び出しを処理できます;-)

Promiseさらに、どれが正確に失敗したかを気にしない場合、これによりエラー処理がはるかに簡単になります。

r = require('request-promise');

r(url1).then(function(resp1) {
    // Process resp 1
    return r(url2 + 'some data from resp1');
}).then(function(resp2) { 
    // resp2 is the resolved value from your second/inner promise
    // Process resp 2
    // ...
    return r(urlN + 'some data from resp2');
}).then(function(respN) {
    // do something with final response
    // ...
}).catch(function(err) {
    // handle error from any unresolved promise in the above chain
    // ...
});
于 2016-01-28T03:55:17.403 に答える