仍然试图围绕承诺及其运作方式。我正在查询Google网站站长API以返回搜索分析数据。我设置了一个承诺,如果我调用它一次返回数据,但我需要根据前一个结果再次调用它。
例如:
startRow = 0;
data = [];
Query(startRow).then((results) => {
if (results != null) {
data.push(results)
startRow++;
// RUN SAME QUERY AGAIN
};
});
如果promise返回数据,则答案 0 :(得分:2)
你不能多次调用同一个Promise,只能创建新的。
startRow = 0;
data = [];
function startQuery() {
// Generally a good idea to always return Promises,
// so you can chain them if needed
return Query(startRow).then(processResults);
}
function processResults(results) {
if (results == null) return;
data.push(results);
startRow++;
return startQuery();
};
startQuery();
或者,以更紧凑的方式:
startRow = 0;
data = [];
function startQuery() {
return Query(startRow).then((results) => {
if (results == null) return;
data.push(results);
startRow++;
return startQuery();
});
}
startQuery();
答案 1 :(得分:1)
你可以做的是创建一个递归返回特定页面的所有结果的函数,然后调用初始页面值为0的函数:
function queryPaged(pageNum, soFar) {
return Query(pageNum).then(function (results) {
return results
? queryPaged(pageNum + 1, soFar.concat(results))
: soFar;
});
}
queryPaged(0, []).then(function (allResults) {
console.log(allResults);
});