在Async.series中的Nodejs Angularjs Mongoose查询

时间:2015-03-22 20:25:59

标签: node.js mongoose node-async

我尝试向我的数据库添加值,然后使用mongoose find检索数据库。添加了值,但是mongoose find不返回值。以下是我的代码。

app.post('/api/infosave', function(req,res){
async.series([function (cb){
    dbinfo.remove({}, function(err,result){
        if (err) throw err;
          cb(null);
    });
}, function (cb){

for (var i=0; i<req.body.numBooks;i++){
    dbinfo.create({
        numBooks: i+1,
        done: false
    });

};cb(null)

}, function (cb){
    dbinfo.find({},function(err,result){
        if (err)
            res.send(err);
        res.json(result);
        console.log(result);
        cb(null);
    });
}], function(error, results) {

});
});

在我的前端,我想输入我的书籍数量,然后根据书籍数量,列表将会出现。例如: -

Number of books:-5(numBooks in the codes) [SUBMIT BUTTON]
Book number 1:
Book number 2:
Book number 3:
Book number 4:
Book number 5:

上面的代码不起作用,但如果我按F5刷新页面。它会给我正确的前端。

感谢帮助

1 个答案:

答案 0 :(得分:0)

您在第二次函数调用中遇到竞争条件,您尝试.create()模型。 .create()为回调采用第二个参数。

看起来应该是这样的。在正确创建所有模型之前,您的.series()功能不应超前。

var bookNum = [];
for (var i = 0; i < req.body.numBooks; i++) {
  bookNum.push(i+1)
}
async.map(bookNum, function(num, cb) {
  dbinfo.create({
    numBooks: i+1,
    done: false
  }, cb);
}, cb);

为您编写整个代码......

app.post('/api/infosave', function(req, res, next) {
    async.waterfall([
        function(cb) {
            dbinfo.remove({}, cb);
        },
        function(ignore, cb) {
            var bookNum = [];
            for (var i = 0; i < req.body.numBooks; i++) {
              bookNum.push(i+1)
            }
            async.map(bookNum, function(num, cb) {
              dbinfo.create({
                numBooks: i+1,
                done: false
              }, cb);
            }, cb);
        }
    ], function(err, results) {
        if (err) return next(err);
        res.json(results);
    })
});