我有一个返回承诺的递归函数,然后我根据该承诺的结果执行一些操作。问题在于它只返回递归函数的一个迭代,这对我来说没有意义。
我试图通过使用setTimeout调用来使其正常工作,这是可行的,但不是很好的做法。我还曾尝试过在承诺之后拼命地添加另一个,看看是否有帮助。
我要获取正确值的变量是“ SurveyArray”。 “ Survey”变量给出三个数组的正确结果。 SurveyArray应该是将这些数组合并为一个包含245个元素的数组,但是它提出了100个元素,这仅是一个元素数组。在我的代码中,我已经将“ Survey”和“ SurveyArray”都记录到了控制台。您可以在以下代码笔中看到此操作:https://codepen.io/anon/pen/JVxmKP
var apiToken = "h69TKYgxu46SMEXzcKkeRUXovq2jALTpHDhPUGLq"
var dataCenter = "co1"
var baseUrl = "https://cors-anywhere.herokuapp.com/https://" +
dataCenter + ".qualtrics.com/API/v3/surveys"
function getSurveys(url) {
// Default options are marked with *
return fetch(url, {
method: "GET", // *GET, POST, PUT, DELETE, etc.
mode: "cors",
// include, *same-origin, omit
headers: {
"Content-Type": "application/json",
"x-api-token": apiToken,
"accept": "application/json"
}
})
.then(response => response.json()); // parses response to JSON
}
var Surveys = []
var offset = 0;
var page = 0
var SurveyArray = []
GroupSurveys(baseUrl).then(function(){
console.log(Surveys)
Object.keys(Surveys).forEach(function(surveys) {
Object.keys(Surveys[surveys].
result.elements).forEach(function(survey) {
SurveyArray.push(Surveys[surveys].result.elements[survey].name)
})
console.log(SurveyArray)
})
})
function GroupSurveys(url) {
return getSurveys(url)
.then(data => Surveys.push(data))
.then(function() {
if (Surveys[page].result.nextPage) {
offset += 100
page += 1
GroupSurveys(baseUrl + "?offset=" + offset)
}
})
.catch(error => console.error(error)); // JSON-string from
`response.json()` call
}
我希望SurveyArray具有245个元素,第一个数组包含100个元素,第二个数组包含100个元素,最后一个数组包含45个元素。它仅提供100个元素,仅是一个数组的数据。
答案 0 :(得分:0)
您需要包装Promise的GroupSurveys来跟踪所有已完成的请求:
function GroupSurveys(url) {
return new Promise(res => {
function GroupSurveysRecursive(url) {
getSurveys(url)
.then(data => Surveys.push(data))
.then(function () {
if (Surveys[page].result.nextPage) {
offset += 100;
page += 1;
GroupSurveysRecursive(baseUrl + '?offset=' + offset)
} else {
res();
}
})
.catch(error => console.error(error)); // JSON-string from `response.json()` call
};
GroupSurveysRecursive(url);
})
}