#javascript #reactjs #typescript #mongodb #realm
Вопрос:
Я использую несколько провайдеров для работы с моей областью, поэтому им нужно убедиться, что ни один из других провайдеров на самом деле не манипулирует областью.
Такая проверка может выглядеть следующим образом:
const createNode = ( type: NodeType, name?: string, value?: string, ): Node amp; Realm.Object =gt; { const realm = realmRef.current; (function writeItemLoop(i) { setTimeout((): Node amp; Realm.Object =gt; { if (!realm.isInTransaction) { let node: Node amp; Realm.Object; realm.write(() =gt; { node = realm.createlt;Nodegt;('Node', { type: type, name: name, value: value, }); }); return node; } else { console.log(`realm was busy ${i}`); if ( i lt;= 10) { writeItemLoop(i); } else { console.log('canceling transaction'); realm.cancelTransaction(); i = 1; writeItemLoop(i); } } }, 1000); })(1); };
1.th вопрос в следующем: как сказать Typescript игнорировать предупреждение:
Не все пути кода возвращают значение.ts(7030)
поскольку, как только область выйдет из своей транзакции, результат будет таким, как было объявлено.
- Как написать функцию-оболочку с универсальными функциями для переноса внутренней транзакции в качестве обратного вызова следующим образом:
Внутренний обратный вызов:
let node: Node amp; Realm.Object; realm.write(() =gt; { node = realm.createlt;Nodegt;('Node', { type: type, name: name, value: value, }); }); return Node;
Wrapper:
const realm = realmRef.current; (function writeItemLoop(j) { setTimeout((): Node amp; Realm.Object =gt; { if (!realm.isInTransaction) { return callback(...args); } else { console.log(`realm was busy ${i}`); if ( i lt;= 10) { writeItemLoop(i); } else { console.log('canceling transaction'); realm.cancelTransaction(); i = 1; writeItemLoop(i); } } }, 1000); })(1);
Спасибо за любые советы!