Обрабатывает ли node-sparql-client связь с конечной точкой синхронно?

Я использую node-sparql-client для запроса моей конечной точки и получения результатов SPARQL. Эта связь с конечной точкой и выполнение функции / обратного вызова (после получения результатов запроса) обрабатываются синхронно? Я просмотрел client.js, но мог многого не пойму.


person Margi    schedule 12.02.2014    source источник
comment
То, что в этом коде есть куча continuation и callback, предполагает наличие некоторого асинхронного выполнения.   -  person Joshua Taylor    schedule 12.02.2014
comment
Спасибо!. Мне нужно последовательно отправить 6 запросов на конечную точку. Итак, мне нужно поместить вызов sparql-client в какой-то синхронный блок.   -  person Margi    schedule 12.02.2014


Ответы (1)


Пример использования из проекта показывает вызов функции execute:

client.query(query)
  //.bind('city', 'db:Chicago')
  //.bind('city', 'db:Tokyo')
  //.bind('city', 'db:Casablanca')
  .bind('city', '<http://dbpedia.org/resource/Vienna>')
  .execute(function(error, results) { … });              ; ** callback here

Функция execute определена в client.js:

SparqlClient.prototype.execute = function (callback) {
  this.sparqlRequest(this.currentQuery, callback);
  return this;
}

Запрос выполняется асинхронно, и фактически callback обрабатывает результаты. Если вам нужно запустить второй запрос после того, как первый будет завершен и его результаты доступны, просто поместите его в обратный вызов.

person Joshua Taylor    schedule 12.02.2014
comment
Спасибо, но у меня есть 6 запросов, а не только 2. Я сохранил запросы в массиве и просматриваю его в цикле. Для каждого запроса я отправляю его в конечную точку с помощью sparql-client, и когда обратный вызов возвращается, обрабатываю результаты этого запроса. Затем переходите к следующему запросу. - person Margi; 12.02.2014
comment
Применяется тот же принцип; просто сделайте так, чтобы у обратного вызова был индекс в массиве, и увеличивайте индекс для следующего обратного вызова, пока не останется больше запросов для обработки ... - person Joshua Taylor; 13.02.2014
comment
Я не очень люблю JavaScript, но вот пример использования обратных вызовов для выполнения итерации в Common Lisp. Идея состоит в том, чтобы ваша функция обратного вызова ссылалась на индекс и снова вызывала запрос с увеличенным индексом. pastebin.com/HruAhcmb - person Joshua Taylor; 13.02.2014