@azure/cosmos
Version:
Microsoft Azure Cosmos DB Service Node.js SDK for NOSQL API
55 lines • 2.29 kB
JavaScript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
import { mergeHeaders, getInitialHeader } from "./headerUtils.js";
/**
* Legacy fetch implementation for when enableQueryControl is false
* @hidden
*/
export class LegacyFetchImplementation {
endpoint;
pageSize;
constructor(endpoint, pageSize) {
this.endpoint = endpoint;
this.pageSize = pageSize;
}
async fetchMore(diagnosticNode, fetchBuffer) {
// Initialize headers fresh for each fetchMore call
const fetchMoreRespHeaders = getInitialHeader();
try {
// Keep fetching until we have enough items or no more results
while (fetchBuffer.length < this.pageSize && this.endpoint.hasMoreResults()) {
const response = await this.endpoint.fetchMore(diagnosticNode);
mergeHeaders(fetchMoreRespHeaders, response.headers);
if (!response ||
!response.result ||
!response.result.buffer ||
response.result.buffer.length === 0) {
if (fetchBuffer.length > 0) {
const copiedFetchBuffer = [...fetchBuffer];
fetchBuffer.length = 0; // Clear array in place
return { result: copiedFetchBuffer, headers: fetchMoreRespHeaders };
}
else {
return { result: undefined, headers: fetchMoreRespHeaders };
}
}
fetchBuffer.push(...response.result.buffer);
}
// Return collected items up to pageSize
if (fetchBuffer.length > 0) {
const temp = fetchBuffer.slice(0, this.pageSize);
fetchBuffer.splice(0, this.pageSize); // Remove items in place
return { result: temp, headers: fetchMoreRespHeaders };
}
else {
return { result: undefined, headers: fetchMoreRespHeaders };
}
}
catch (err) {
mergeHeaders(fetchMoreRespHeaders, err.headers);
err.headers = fetchMoreRespHeaders;
throw err;
}
}
}
//# sourceMappingURL=LegacyFetchImplementation.js.map