как создать функцию runner в Typescript для вызова функции записи только в том случае, если она не входит в транзакцию?

#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)

поскольку, как только область выйдет из своей транзакции, результат будет таким, как было объявлено.

  1. Как написать функцию-оболочку с универсальными функциями для переноса внутренней транзакции в качестве обратного вызова следующим образом:

Внутренний обратный вызов:

 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);  

Спасибо за любые советы!