所以这是我的函数,它应该插入我以后需要的数据:
const mongo = require('mongoskin');
const mochaDB = mongo.db(MONGO_URL, {});
function createTestAdmin() {
const userData = createTestUserData();
mochaDB.collection('users').insert(userData, function(err, result) {
if (err) throw err;
});
}
所以现在我的问题是,插件运行异步,在我可以访问插入的数据之前,我必须等到这个函数完成。
Note1 :这发生在mocha测试运行中的before
块中。
Note2 :我使用的mongoskin是mongodb客户端的包装器,但如果有mongodb客户端的解决方案,我可以扔掉mongoskin。
有没有办法可以等待数据库完成操作?
答案 0 :(得分:1)
我不确定mongoskin,但是本机客户端的insert
方法返回一个在插件完成时解析的promise。
此外,如果您在方法之前从Mocha返回承诺,则mocha不会开始任何测试,直到此承诺结算(或拒绝)。
您可以希望重构代码,以便before方法返回insert
方法返回的promise。
可能是这样的:
function createTestAdmin() {
const userData = createTestUserData();
return mochaDB.collection('users').insert(userData, function(err, result) {
if (err) throw err;
});
}
before(function() {
// other code
return createTestAdmin()
})
如果你的"之前有更多异步操作,那么"函数,您可以返回Promise.all([p1, p2...])
,其中p1
,p2
等是每个异步操作的一个承诺。