带有请求承诺的顺序请求
Sequential requests with request-promise
是否有一种嵌套较少的方法来实现以下 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
// .....
});
});
每个请求都依赖于最后一个请求的结果,因此它们需要是顺序的。但是,我的一些逻辑需要多达五个顺序请求,这会导致相当多的嵌套噩梦。
我做错了吗?
您可以 return 在提供给 Promise.then
的 onFulfilled
函数中 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
// .....
});
这让您可以处理多个呼叫,而不会陷入嵌套的噩梦中;-)
此外,如果您不关心哪个 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
// ...
});
是否有一种嵌套较少的方法来实现以下 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
// .....
});
});
每个请求都依赖于最后一个请求的结果,因此它们需要是顺序的。但是,我的一些逻辑需要多达五个顺序请求,这会导致相当多的嵌套噩梦。
我做错了吗?
您可以 return 在提供给 Promise.then
的 onFulfilled
函数中 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
// .....
});
这让您可以处理多个呼叫,而不会陷入嵌套的噩梦中;-)
此外,如果您不关心哪个 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
// ...
});