我正试图使用此处记录的"before"one_answers"after"查询字符串参数从Typeform中检索调查的所有响应:https://developer.typeform.com/responses/walkthroughs/#use-查询参数以检索特定数据
我宁愿不使用"因为"one_answers"直到",因为我一天可能会有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
}
我试着自己运行代码,看起来总是有一个额外的结果在最后添加。使其成为allResults
数组中的重复结果,并使长度减少一。
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)
}
你觉得怎么样?