J'ai un problème de récupération de plus de mille enregistrements. D'une manière ou d'une autre, seuls les 1000 premiers sont récupérés. D'après mes recherches, j'ai compris que je devais utiliser le jeton getContinuation pour obtenir les enregistrements suivants. Veuillez indiquer comment dois-je l'ajouter à mon code.

tableService.queryEntities(table, tableQuery, null, function(error, results) {
    if (error) {
        alert('List table entities error, please open browser console to view detailed error');
        console.log(error);
    } else {
        //display records

});
0
GuessssMe 20 nov. 2018 à 04:58

3 réponses

Meilleure réponse

Pour travailler avec le rappel basé sur votre code, utilisez la récursivité.

var entities = [];
function queryEntitiesSegmented(table, tableQuery, continuationToken){
    tableService.queryEntities(table, tableQuery, continuationToken, (error, results)=> {
        if (error) {   console.log(error); } 
        else { 
            entities.push.apply(entities, results.entries);
            if(results.continuationToken){
                queryEntitiesSegmented(table, tableQuery, results.continuationToken);
            }
            else{
                entities.forEach(entity=>{
                   // display each one
                })
            }
        }
    });
}

queryEntitiesSegmented(table, tableQuery, null);

Un autre choix est asynchrone et attend.

const queryEntitiesSegmented = async(table, tableQuery, continuationToken)=>{
    return new Promise((resolve,reject)=>{
        tableService.queryEntities(table, tableQuery, continuationToken, (error, results)=> {
            if (error) {  reject(error); } 
            else { resolve(results);  }
        });
    });
}

async function queryAllEntities(){
    var tableQuery = new azure.TableQuery();
    var table = 'tableName';
    var continuationToken = null;
    var entities = [];
    do{
        var results =  await queryEntitiesSegmented(table, tableQuery, continuationToken);
        continuationToken = results.continuationToken;
        entities.push.apply(entities, results.entries);
    }
    while(continuationToken!=null);
    return entities;
}

queryAllEntities().then(entities=>{
    entities.forEach(entity=>{
    //display each one
    })
}).catch(error=>{ console.log(error); })
4
Jerry Liu 20 nov. 2018 à 06:40

Vous pouvez essayer ceci

        var resultList = new List<T>();
        TableQuery<T> query = new TableQuery<T>();

        TableContinuationToken continuationToken = null;


        var table = _tableClient.GetTableReference(tableName);

        do
        {
            var token = continuationToken;
            var queryResult = TryOperation(() => table.ExecuteQuerySegmented(new TableQuery<T>(), token), tableName);
            if (queryResult != null)
            {
                resultList.AddRange(queryResult.Results);
                continuationToken = queryResult.ContinuationToken;
            }
        } while (continuationToken != null);

        return resultList;
0
Gaurav Moolani 20 nov. 2018 à 05:38

J'ai créé un package npm juste pour cela si vous souhaitez l'utiliser. https://www.npmjs.com/package/azure-table-query- récursif

Usage

const {queryAzureTableStorage, TableQuery, createTableService} = require('azure-table-query-recursive');

const validConnectionString = 'DefaultEndpointsProtocol=https;AccountName=xxxxxxx;AccountKey=xxxxxxxxxxxxxxxxxxxxxxx==;EndpointSuffix=core.windows.net';
const query = `PartitionKey eq 'apartitionkey'`;
const table = 'aTable';

//Constract a tableStorage object
const tableStorage = createTableService(validConnectionString);
//Constract an azure table query
const azureQuery = new TableQuery().where(query);

const tableResults = await queryAzureTableStorage(azureQuery, table, tableStorage);
0
ThanosDi 21 août 2019 à 12:56