2015-04-17 2 views
0

Я пытаюсь создать хранилище класса/функции в JavaScript, но из-за обратных вызовов я не могу вернуть значение из функции:Mongoose и nodejs с узором репозиториев без обратных вызовов

this.getAll = function(collection) 
{ 
    var result; 

collection.find(function (err, objects) { 
       if (err) return console.error(err); 
       console.log(objects); 
       var result = objects; 
     }); 

    return result; 
} 

var result = repo.getAll(Kitten); 
console.log(result); 

, но результат здесь сначала вызывается, а обратный вызов называется позже. Является ли хорошей идеей делать то, что я пытаюсь сделать? Или я должен просто передать функцию обратного вызова в репозиторий?

ответ

2

Я использую обратные вызовы. Он считает, что это функция NodeJS. Также вы можете использовать обещания вместо обратных вызовов.

Вы можете создать метод для хранилища вроде как:

function getAll(collection, cb){ 
    collection.find(function (err, objects) { 
     cb(err, objects); 
    }); 
} 

getAll(Kitten, function(err, objects){ 
    console.log(objects); 
}); 
0

Вы должны научиться использовать функции обратного вызова. Если вам не нравится созданный синтаксис, вместо этого вы можете использовать обещания. Обратные вызовы в JavaScript и NodeJS являются фундаментальными. Но чтобы избежать эффекта рождественской елки, реорганизуйте код в функции и методы. Я также рекомендую вам взглянуть на асинхронный модуль, а именно async.series и async.parallel.

Вы можете взглянуть на the following blog, который выделяет некоторые действительные точки об nodejs.

Смежные вопросы