我已经在线阅读了一些Promises方法的教程,但我仍然有点困惑。 我有一个Node app.js,它执行几个功能,包括连接到db。
db.connect(function(err) {
setupServer();
if(err) {
logger.raiseAlarmFatal(logger.alarmId.INIT,null,'An error occurred while connecting to db.', err);
return;
}
现在我编写了一个mocha单元测试套件,它封装了这个应用程序并对它执行了几次请求调用。在某些情况下,发生的情况是测试初始化而未确认数据库已成功连接,即:setupServer()
已执行。
我如何为这些异步代码实现promises方法,如果不是promises,我应该使用什么?我已经尝试了事件发射器,但是这仍然不能满足所有要求,并且在清理过程中会导致失败。
答案 0 :(得分:0)
您需要在Promise
工作的函数体内使用async
。对于你的情况,我认为你所说的setupServer()
包含ajax请求。
conts setupServer = () => {
return new Promise((resolve, reject) => {
//async work
//get requests and post requests
if (true)
resolve(result); //call this when you are sure all work including async has been successfully completed.
else
reject(error); //call this when there has been an error
});
}
setupServer().then(result => {
//...
//this will run when promise is resolved
}, error => {
//...
//this will run when promise is rejected
});
进一步阅读:
答案 1 :(得分:0)
如果您使用的是mocha,则应使用asynchronous code approach。通过这种方式,您可以指示mocha等待您调用done
函数,然后再继续使用。
这会让你开始:
describe('my test', function() {
before(function(done) {
db.connect(function(err) {
setupServer(done);
});
})
it('should do some testing', function() {
// This test is run AFTER 'before' function has finished
// i.e. after setupServer has called done function
});
});
假设您的setupServer
在完成后调用done
函数:
function setupServer(done) {
// do what I need to do
done();
}