我有一个第三方程序包下面的功能,我不能修改
async function runTransaction(callback) {
const client = await createClient();
try {
await client.query("BEGIN");
await callback(client);
} finally {
await client.query("COMMIT");
}
}
通常,我必须创建一个pixelc函数,并将其传递给runTransaction
async function update(client) {
await client.query("UPDATE ...")
}
await runTransaction(update);
我想知道是否有一种方法可以在异步生成器模式中使用runTransaction
.这是我的素描.我想要的最终结果是BEGIN
,然后UPDATE
,然后COMMIT
async *clientGenerator() {
await runTransaction(async client => {
yield client
});
// this will not work as yield can't be used in a callback
}
async function main() {
const dbClientGenerator = await clientGenerator();
const dbClientHolder = await dbClientGenerator.next();
await dbClientHolder.value.query("UPDATE ...");
}
我在下面也try 了,但回调与runTransaction
中的await client.query("COMMIT");
同时被调用.
async *clientGenerator() {
yield new Promise(resolve => {
runTransaction(async client => {
resolve(sql);
})
})
}
你知道怎么做到吗?