evernote findNotesMetadata - использование смещения и максимальных значений l oop для извлечения всех заметок - PullRequest
0 голосов
/ 27 февраля 2020

За Evernote Документация для findNotesMetadata Максимальное количество возвращаемых сервером ответов в 1 ответе - 250. Я пытаюсь понять, как сделать несколько запросов для получения всего массива, если их больше 250. Ниже приведен текущий код.

const Evernote = require('evernote');
const developerToken = "...";
const client = new Evernote.Client({token: developerToken, sandbox: false});
const noteStore = client.getNoteStore();
const spec = {}
  spec.includeTitle = true;
  spec.includeTagGuids = true;
  spec.includeAttributes = true;
  spec.includeNotebookGuid = true;
const filter = new Evernote.NoteStore.NoteFilter({
  words: '*',
});

noteStore.findNotesMetadata(filter, 0, 250, spec)
  .then(noteobj => {  
   ...
  })
  .catch( e => console.error(e));

Текущий код еще не содержит l oop, но работает до 250 нот. Из-за Evernote SDK и работы с обещаниями я не уверен, даже с чего начать. Я много раз искал в Интернете, чтобы найти решение напрямую (глядя на примеры Evernote) и косвенно (глядя на другие примеры API остальных). Не повезло. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 04 марта 2020

Параметр offset для findNotesMetadata - это способ указания начального индекса в требуемом фактическом наборе результатов. В случае кода, который вы показали, вы передаете 0 (это второй параметр). Это говорит API, что вы хотите, чтобы ваши результаты начинались с позиции 0 в фактическом наборе результатов, максимум до 250 результатов.

Если вы хотите «просмотреть» набор результатов в windows из 250 результатов, вы можете снова вызвать метод, используя 250 в качестве смещения, и запросить следующие 250 результатов. Это довольно распространенный шаблон проектирования для разбивки по наборам результатов через удаленный API или любой другой ресурс, имеющий ограничения по ресурсам для получения данных. Вы захотите обработать случаи, когда больше результатов нет - либо потому, что вы получите меньше, чем запрашиваемое maxNotes, либо угловой случай, когда вы получите именно максимальное число, но затем ноль при следующем запросе. Вот как вы знаете, как выйти из вашего l oop.

API Evernote предлагает метод findNoteCounts, который должен дать вам представление о том, сколько будет реальных результатов, но как и в случае с во всех асинхронных c системах существует теоретическая гонка, в которой это число изменяется между вызовами API.

...