我正尝试使用“之前”和“之后”查询字符串参数从Typeform检索调查的所有响应,如此处所述:https://developer.typeform.com/responses/walkthroughs/#use-query-parameters-to-retrieve-specific-data
我宁愿不使用“ since”和“ until”,因为一天中可能会有1000多个响应(并且文档表明在这种情况下应使用before / after。)基于令牌的方法似乎无论如何都要清洁。
我的问题是,我永远无法检索与第一次调用中返回的“ total_items”值一致的结果集。也许我的期望不正确?我得出的值比这个值短数百。下面的代码摘录。我在第一个调用中包含一个空的“ before”查询字符串参数,因为文档表明该参数的存在会更改顺序以使其与流程顺序一致(而不是提交顺序)。
async getAllResults(formId) {
const opts = {
...this._opts,
url: `https://api.typeform.com/forms/${formId}/responses?page_size=1000&before`
}
let results = (await axios.request(opts)).data
let allResults = results.items
const totalResponseCount = results.total_items
while (results.items.length > 0) {
const lastToken = _.last(results.items).token
results = (await axios.request({ ...opts, url: opts.url + `=${lastToken}` })).data
allResults = _.concat(allResults, results.items)
}
// Fails
assert.ok(allResults.length === totalResponseCount)
return allResults
}
答案 0 :(得分:0)
我试图自己运行代码,并且看起来总会有额外的结果被添加到最后。将其复制到allResults
数组中,并将长度加1。
while
循环是否应该持续到allResults.length === totalResponseCount
为止?
所以代码是:
while (allResults.length != totalResponseCount && results.items.length > 0) {
const lastToken = _.last(results.items).token
results = (await axios.request({ ...opts, url: opts.url + `=${lastToken}` })).data
allResults = _.concat(allResults, results.items)
}
您怎么看?