googleapis / googleapis/google-api-nodejs-client

Fitness API: Pagination is infinite with empty data

Open
#3,118 1 comment 0 reactions 1 assignee Claimed by @sofisl View on GitHub
external priority: p2 type: bug
Dominant language
TypeScript
Stars
12.2k
Forks
2k
Avg merge
1d 9h
Merged PRs (30d)
24

Description

#### Environment details

- OS: macOS 13.0.1
- Node.js version: v18.1.0
- npm version: 8.8.0
- `googleapis` version: 108.0.1

#### Problem

Trying to query all data from a dataSourceId via the fitness API using `nextPageToken` will result in an infinite loop. The `nextPageToken` is set even though no data is transmitted (i.e. inserted/deletedDataPoints are empty). I stopped the loop after around 2000 empty responses. Stopping after the first empty response appears to miss later data.

#### Steps to reproduce

```javascript
let collectedData = [];

let finished = false;
let pageToken = false;

while (!finished) {
let params = {
userId: "me",
dataSourceId
};

if (pageToken) {
params.pageToken = pageToken;
}

let results = await fitness.users.dataSources.dataPointChanges.list(params);
let data = results.data;
collectedData.push(data);

let nextPageToken = (data.nextPageToken && data.nextPageToken !== pageToken) ? data.nextPageToken : false;

let hasData = data.deletedDataPoint.length || data.insertedDataPoint.length;
if (!hasData && nextPageToken) {
console.warn("Got nextPageToken even though data is empty")
}

finished = !nextPageToken;
pageToken = nextPageToken;
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.