javascript - 如何在 Typescript 中创建一个运行器函数,仅当它不在事务中时才调用领域写入?
问题描述
我正在使用多个提供商来处理我的领域,因此他们需要确保没有其他提供商确实在操纵领域。
这样的检查可能如下所示:
const createNode = (
type: NodeType,
name?: string,
value?: string,
): Node & Realm.Object => {
const realm = realmRef.current;
(function writeItemLoop(i) {
setTimeout((): Node & Realm.Object => {
if (!realm.isInTransaction) {
let node: Node & Realm.Object;
realm.write(() => {
node = realm.create<Node>('Node', {
type: type,
name: name,
value: value,
});
});
return node;
} else {
console.log(`realm was busy ${i}`);
if (++i <= 10) {
writeItemLoop(i);
} else {
console.log('canceling transaction');
realm.cancelTransaction();
i = 1;
writeItemLoop(i);
}
}
}, 1000);
})(1);
};
1.th 问题是:如何告诉 Typescript 忽略警告:
并非所有代码路径都返回 value.ts(7030)
因为一旦领域超出其事务,结果将如声明的那样。
- 如何使用泛型编写包装函数以将内部事务包装为回调,如下所示:
内部回调:
let node: Node & Realm.Object;
realm.write(() => {
node = realm.create<Node>('Node', {
type: type,
name: name,
value: value,
});
});
return Node;
包装:
const realm = realmRef.current;
(function writeItemLoop(j) {
setTimeout((): Node & Realm.Object => {
if (!realm.isInTransaction) {
return callback(...args);
} else {
console.log(`realm was busy ${i}`);
if (++i <= 10) {
writeItemLoop(i);
} else {
console.log('canceling transaction');
realm.cancelTransaction();
i = 1;
writeItemLoop(i);
}
}
}, 1000);
})(1);
感谢您的任何建议!
解决方案
推荐阅读
- node.js - 连接 oracledb 时出现“'TypeError: Cannot read property 'Promise' of undefined”
- python - Bokeh - 更新滑块的功能
- java - Java 正则表达式表现怪异
- debugging - 如何在 MongooseIM 的 rebar.config 中添加调试器应用程序?
- javascript - 删除多个数组中的唯一重复项并将它们求和 Javascript
- asp.net - ASP.NET Core 2.1 迁移关键字不支持用户 ID
- wolfram-mathematica - 如何使用 Mathematica 解决我的代码中的数值微分和积分?
- android - Android:指定的 AAPT2 可执行文件不存在:在创建应用程序时添加 kotlin 支持后
- c - 两个文件在C程序中各输出一行
- database - 甲骨文,DBMS_SESSION.SET_CONTEXT