使用promises等待函数完成

时间:2016-08-11 15:25:26

标签: javascript node.js promise mocha

我已经在线阅读了一些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,我应该使用什么?我已经尝试了事件发射器,但是这仍然不能满足所有要求,并且在清理过程中会导致失败。

2 个答案:

答案 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();
}