Включить необходимые контрактные вызовы API автоматически

У меня есть этот код:

  function runAsync(fn: Function) {
    ret.count++;
    fn(function (err: Error) {
      err && console.error(err.stack || err);
      ret.count--;
      if (ret.count < 1) {
        ret.cb();
      }
    });
  }

  s.on(events.FATAL_TEST_ERROR, function (val: any) {

    runAsync(function (cb: Function) {

      db.serialize(function () {
        db.run('CREATE TABLE lorem (info TEXT)');

        let stmt = db.prepare('INSERT INTO lorem VALUES (?)');
        for (let i = 0; i < 10; i++) {
          stmt.run('Ipsum ' + i);
        }
        stmt.finalize();

        db.all('SELECT rowid AS id, info FROM lorem', function (err: Error, rows: Array<any>) {

          cb()
        });
      });

    });
  });

происходит то, что если пользователь хочет включить асинхронные вызовы, ему нужно вызвать функцию runAsync, а затем поместить свой код в тело функции, которое передается в runAsync.

Можно ли как-нибудь сделать это более автоматическим, чтобы пользователь меньше беспокоился о том, чтобы полностью соответствовать API?

Моя главная проблема заключается в том, что функция runAsync должна вызываться в том же тике, что и вызов обработчика событий. Другая моя проблема в том, что пользователи API слишком часто забывают запускать обратные вызовы.

1 ответ

Пожалуйста, рассмотрите возможность использования обещаний: https://www.promisejs.org/

Другие вопросы по тегам