Включить необходимые контрактные вызовы 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/