Как мне отказаться от подписки или изменить канал изменений в rethinkdb?

Есть ли способ отказаться от подписки или изменить существующего наблюдателя каналов изменений в rethinkdb? Установка для возвращаемого значения функции changes () значения null, похоже, ничего не делает, есть ли функция unsubscribe ()?

В идеале я бы хотел изменить один из параметров фильтра индекса (избранное) после создания канала изменений (поскольку каналы изменений при объединениях не работают, и я должен изменить канал, если базовая коллекция избранного изменится).

Вот пример кода в javascript

  var observer = r.table("users")
                 .getAll(r.args(favorites), {index:"name"})
                 .changes().then(function(results) {


            results.each(function(err,row) {
              if (err) console.error(err);
              var prefix = row.new_val ? 'added' : 'deleted';
              var msg =  row.new_val ?  row.new_val :  row.old_val;
              console.log(prefix + ': ' +  msg.name);
          });

      });

 observer = null; //what do I do there to have it stop observing or unsubscribe... or change the subscription to something else.. say adding a filter or changing a filter?

person MonkeyBonkey    schedule 14.10.2015    source источник


Ответы (2)


Не знаю, какую библиотеку вы используете для JS. С rethinkdb + rethinkdb-pool вы можете использовать следующие синтаксисы:

r.table("users").getAll(r.args(favorites), {index:"name"})
                .changes().run(connection, function(err, cursor) {


     cursor.each(function(err,row) {
         if (err) console.error(err);
         var prefix = row.new_val ? 'added' : 'deleted';
         var msg =  row.new_val ?  row.new_val :  row.old_val;
         console.log(prefix + ': ' +  msg.name);
     });
}

После этого вы можете просто закрыть курсор, чтобы перестать получать изменения:

cursor.close();

Или вы можете закрыть соединение, и он автоматически закроет все курсоры, связанные с соединением:

connection.close();
person Suvitruf - Andrei Apanasik    schedule 14.10.2015

В частности, я не знаком с драйвером JS, но обычно в какой-то момент вы должны получить курсор, и вызов close на этом курсоре закроет канал изменений. (Я не уверен в API выше, observer или results является курсором, но если вы напечатаете их типы, вы сможете увидеть.)

person mlucy    schedule 14.10.2015