Видите только «COMMITTING» от getPendingTransactions и никогда «COMMIT_FAILED»?

Я пытаюсь настроить повторные попытки при неудачных мутациях, как задокументировано Relay: https://facebook.github.io/relay/docs/api-reference-relay-container.html#getpendingtransactions.

Я вызываю сбой мутации на сервере graphql, возвращая ошибку:

 mutateAndGetPayload: ({text}) => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(new Error("failed"));
      }, 2 * 1000);
    });
  },

Когда я впервые выполняю мутацию, я вижу статус «COMMITTING». Но затем при следующем рендеринге getPendingTransactions возвращает значение null, и я не могу понять, как увидеть статус «COMMIT_FAILED».

var transactions = this.props.relay.getPendingTransactions(this.props.story);

console.log("TRANSACTIONS", transactions);

var transaction = transactions ? transactions[0] : null;

if (transaction) {
  console.log("STATUS", transaction.getStatus());
}

Я должен что-то упустить, но пока не могу понять.


person svolchok    schedule 06.01.2016    source источник


Ответы (1)


Ваша транзакция с COMMIT_FAILED не будет в pendingTransactions, так как она уже была предпринята и не удалась. Вы мутируете, используя RelayStore.update ?

Вы можете попробовать создать транзакцию, используя RelayStore.apply_update. Эта функция фактически возвращает объект транзакции. Затем вы можете позвонить transaction.commit(). Если это не удается, ваш объект транзакции должен иметь статус COMMIT_FAILED.

person XuoriG    schedule 08.01.2016
comment
Да, я вижу, что это возвращает транзакцию, и я могу получить от нее статус. Я также вижу, что могу передавать обратные вызовы либо в RelayStore.update, либо в RelayStore.appyUpdate, и я могу получить транзакцию в обратном вызове сбоя и вызвать там transaction.recommit()... Я до сих пор не уверен, как Relay ожидает, что он будет работать как документация: facebook.github.io/relay/ docs/ Спасибо за ответ! - person svolchok; 08.01.2016
comment
О, я не видел эту часть документа. Может быть, я ошибаюсь, что этого не должно быть в pendingTransaction тогда. Приятно знать, что это сработало с apply_update! - person XuoriG; 08.01.2016