【发布时间】:2018-02-24 21:38:59
【问题描述】:
是否有任何简单的方法可以使用 promise 进行递归调用。这是我的示例。
function getData() {
var result=[];
var deferred = Q.defer();
(function fetchData(pageno){
var options = {
method : 'GET',
url : 'example.com/test',
qs:{
pageNo: pageno
}
}
request(options, function (error, response, body) {
if (error)throw new Error(error);
if (body.hasMorePage == true) { //checking is there next page
result.push(body)
fetchData(++body.pageno); // getting next page data
} else {
deferred.resolve(result); // promise resolve when there is no more page
}
});
})(0);
return deferred.promise;
}
getData().then(function(data){
console.log(data)
});
让我们考虑 API 在连续调用中提供更多数据。为了收集所有数据,我需要使用之前呼叫响应中的一些参数(EX:hasMorePage)。我只需要为了获得这种情况而进行回归调用,但我想知道一种更好的(Promise)方式。
非常欢迎。
【问题讨论】:
-
不需要
Q,你可以使用new Promise(...),你可以使用async/await在for(...)循环中链接你的请求。 -
这种情况下我如何使用for循环,仅基于上一个调用我将决定是否需要进行下一个调用或需要解决它。
-
看我的回答。它显示了我的想法。