是否存在使用请求承诺实现以下内容的嵌套方式:
r = require('request-promise'); r(url1).then(function(resp1) { // Process resp 1 r(url2 + 'some data from resp1').then(function(resp2) { // Process resp 2 // ..... }); });
每个请求都取决于最后一个的结果,因此它们需要是顺序的.但是,我的一些逻辑需要最多五个连续请求,这会引起很多嵌套的噩梦.
我错了吗?
解决方法
你可以在提供给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 // ... });