我有这段代码:
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用户忘记触发回调是很常见的。