Nodejs Angularjs 里面的 Mongoose 查询 Async.series

Nodejs Angularjs Mongoose Query inside Async.series

我试图将值添加到我的数据库,然后使用 mongoose find 检索数据库。添加了值,但 mongoose 查找没有 return 值。以下是我的代码。

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) {

});
});

在我的前端,我想输入我的书数,然后根据书数,列表将appear.Example如下:-

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 刷新页面。它会给我正确的前端。

感谢帮助

您在尝试 .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);
    })
});