具有存储库模式的Mongoose和nodejs没有回调

时间:2015-04-17 10:10:53

标签: javascript node.js mongodb mongoose repository-pattern

我正在尝试在javascript中创建一个存储库类/函数,但由于回调,我无法从函数中返回值:

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 个答案:

答案 0 :(得分:2)

我使用回调。它认为它是NodeJS功能。您也可以使用promises而不是回调。

您可以创建存储库的方法,如:

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

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

答案 1 :(得分:0)

您应该学习如何使用回调。如果您不喜欢它创建的语法,则可以使用promises。 JavaScript和NodeJS中的回调是基础。但是要避免圣诞树效果,请将代码重构为函数和方法。我还建议您查看异步模块,特别是async.series和async.parallel。

您可以查看the following blog,其中突出显示了有关nodejs的一些有效要点。