Извлечение более 1000 записей из таблицы хранения Azure - js - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблема с получением более тысячи записей. Каким-то образом извлекаются только первые 1000. Из моего исследования я понял, что мне нужно использовать токен getContinuation для получения последующих записей. Посоветуйте, пожалуйста, как мне добавить его в мой код.

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

});

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Для работы с обратным вызовом на основе вашего кода используйте рекурсию.

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);

Другой выбор - асинхронный и ожидающий.

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); })
0 голосов
/ 20 ноября 2018

Вы можете попробовать это

        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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...