在nodeJS中链接异步调用MongoDB

时间:2017-03-18 02:53:52

标签: node.js mongodb asynchronous atomic

我有一个测试,它测试一个异步更新数据库的外部模块,然后立即使用(更新的)值进行下一次调用。这是通过链接下面的承诺来完成的。

var expectedCateg = 'expected';

ExternalModule.loadUsers(2)
    .then(function firstCallback(){
        return ExternalModule.updateDBAsync(db, expectedCateg);
    })
    .then(function secondCallback(updatedRecord){
        return ExternalModule.readDBAsync(db, categ);
    })
    .then(function thirdCallback(resultCateg){
        if (resultCateg == expectedCateg) {
            console.log("hurray")
        }
    })

更新数据库异步的ExternalModule有几个这样的调用:

exports.updateDBAsync(db, expectedCateg) {
    return Db.getMyDb()
        .updateAsync(
            { $and: [{"keyA": keyA}, {"keyB": keyB}],
              "$isolated": true,
         },
         { $set: {"categ": expectedCateg}},
         {multi: false})
        .then(function success (results) {
           return results
        })
   }

这应该记录" hurray"但是,如果我执行它然后我手动查看数据库,使用robomongo,它就会更新。这意味着当调用secondCallback时,数据库更新操作 not 已完成。

这怎么可能?只有在操作完成后才能解决承诺的意义吗?我们如何才能确保仅在数据库更新实际完成后才传递控件?

0 个答案:

没有答案