Мы рады сообщить, что только что выпустили Node.js SDK, который еще больше упростит использование Event Registry API. SDK доступен на GitHub и NPM.

Благодаря последним достижениям в новых стандартах есть несколько удобных подходов, которые могут помочь вам при работе с JavaScript. Прежде всего, недавно выпущенный SDK основан на обещаниях. Основная причина этого заключалась в том, чтобы избежать любых потенциальных «адов обратных вызовов», и вся концепция идеально увязывается с обычно асинхронным характером таких функций в средах JavaScript. Это означает, что требуется версия Node JS не ниже 6.4.0, или, если у вас есть какие-либо ограничения при обновлении Node JS, вы можете использовать транспилятор JS (или Typescript).

Вот несколько примеров, демонстрирующих новую библиотеку на основе промисов.

const er = new EventRegistry({apiKey: "YOUR_API_KEY"}); er.getConceptUri("Star Wars")
  .then((conceptUri) => {      
    const query = new QueryEvents({conceptUri: conceptUri});     
    const requestEventsInfo = new RequestEventsInfo(
      {sortBy: "date", count: 10});         
    query.addRequestedResult(requestEventsInfo);      
    return er.execQuery(query); 
  }).then((response) => {      
    console.info(response); 
  });

Альтернативный подход с использованием нового шаблона «async/await».

const er = new EventRegistry({apiKey: "YOUR_API_KEY"}); 
async function iterateOverEvents() { 
  const query = new QueryEvents({
    conceptUri: await er.getConceptUri("Star Wars")}); 
    const requestEventsInfo = new RequestEventsInfo(
      {sortBy: "date", count: 10});    
    query.addRequestedResult(requestEventsInfo); 
    return er.execQuery(query); 
} 
iterateOverEvents();

Повторим еще раз: почти все библиотечные функции возвращают обещание, которое затем разрешается либо соответствующими данными с указанного сервера, либо сообщением об ошибке. Заметными исключениями являются следующие классы: QueryArticlesIter, QueryEventArticlesIter и QueryEventsIter. Они обеспечивают способ постепенного извлечения и обработки данных с сервера.

Эти классы предоставляют собственную реализацию функции execQuery, которая отличается от основной реализации. Он принимает 2 аргумента. Первый аргумент — это анонимная функция, которая вызывается каждый раз, когда мы получаем новую порцию событий или статей. Вторая — это функция, которая вызывается, когда мы заканчиваем нашу итерацию.

Пример. Перебрать все статьи, относящиеся к определенному событию с заданным URI.

const er = new EventRegistry(); 
const iter = new QueryEventArticlesIter(er, "eng-2940883"); 
iter.execQuery((articles) => { 
  console.info(articles); 
}, () => { 
  console.info("done"); 
});

Подробные примеры можно найти на GitHub, а документацию по библиотеке — на вики-страницах проекта.