node.js и mongodb-native: ждать, пока коллекция не будет пустой - PullRequest
0 голосов
/ 24 февраля 2012

Я использую node.js и с собственным драйвером mongodb (node-mongodb-native);

Мой текущий проект использует node.js + now.js + mongo-db.

Система в основном отправляет данные из браузера в node.js, который обрабатывается с помощью haskell, а затем снова возвращается в браузер.

Через форму и node.js текст вставляется в коллекцию mongo-db, называемую «messages». Поток haskell читает запись и сохраняет результат в коллекции результатов db. Это отлично работает.

Но теперь мне нужен код JavaScript, который ждет, когда результат появится в результатах коллекции.

Псевдокод:

   wait until the collection result is non-empty.
   findOne() from the collection results.
   delete the collection results.

В настоящее время я подключаюсь к mongodb следующим образом:

    var mongo = require('mongodb'),
    Server = mongo.Server,
    Db = mongo.Db;

    var server = new Server('localhost', 27017, {
        auto_reconnect: true
    });
    var db = new Db('test', server);

Мои знания языка Хаскел довольно хорошие, но не мои навыки работы с JavaScript. Поэтому я провел обширные поиски, но далеко не ушел.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

рад, что вы решили это, я собирался написать что-то подобное:

setTimeout(function(){ 
   db.collection('results',function(coll){
      coll.findOne({}, function(err, one){
        if( err ) return callback(err);
        coll.drop(callback); //or destroy, not really sure <-- this will drop the whole collection
      });
   });
} ,1000);
2 голосов
/ 25 февраля 2012

Решение заключается в использовании библиотеки async .

var async = require('async');
globalCount = -1;

async.whilst(
    function () {
        return globalCount<1;
    },
    function (callback) {

        console.log("inner while loop");
        setTimeout(db_count(callback), 1000);
    },
    function (err) {
        console.log(" || whilst loop finished!!");
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...