Получить результат обратного вызова в переменной - PullRequest
0 голосов
/ 20 октября 2018

Я стою перед огромной проблемой, которую не могу решить.Я хочу получить результат функции collection.find() из Mongodb, а затем поместить результат в переменную, которую я мог бы использовать в другой функции, работающей независимо.Поскольку это немного основательно для объяснения, вот код:

client.connect(function (err) {
    assert.equal(null, err);
    const db = client.db(myDatabase);
    const collection = db.collection(myCollection);
    collection.find({}).toArray(function (err, docs) {
        //docs is the final result that I want to store in a variable
    });
});

$(myInput).change(function() {
    //using docs
})

'docs' является результатом обратного вызова, я не знаю, как извлечь его из переменной.Я пытался сохранить все это в переменной, я пытался глобальные переменные, но ничего не работает, я все равно получаю undefined каждый раз, когда я запускаю свою программу.Так что да, я мог бы запустить свою функцию в обратном вызове collection.find()

client.connect(function (err) {
        assert.equal(null, err);
        const db = client.db(myDatabase);
        const collection = db.collection(myCollection);
        collection.find({}).toArray(function (err, docs) {
            $(myInput).change(function(docs) {
                //using docs
            })
        });
});

, но так как это функция, которую я запускаю много раз, она будет вызывать Mongo очень часто, и это не самая лучшая вещь длятем более, что моя база данных работает на другом компьютере.

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Монго уже использует обещания и для асинхронного (при условии v3 +)

Let doc=[];

client.connect(function (err) {
assert.equal(null, err);
const db = client.db(myDatabase);
Let collection=               db.collection(myCollection);
collection.find({})
.then(results=>{
  //modify data
  doc.push(results);
  myfunction();
 }

});

 function  myFunction(){
console.log(doc)
  }
0 голосов
/ 20 октября 2018

Определите docs в глобальной области и назначьте данные после find метода

let docs;

client.connect(async err => {
  assert.equal(null, err);
  const db = client.db(myDatabase);
  const collection = db.collection(myCollection);
  try {
    // docs is now a global variable containing all of the db collection
    docs = await collection.find({});
    myFunction();
  } catch (error) {
    // do something with the error
  }
});

function myFunction(){
  console.log("print docs", docs)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...