1

mutateAndGetPayloada の関数から Promise を返そうとしていmutationWithClientMutationIdますが、応答が返ってこないようです。要求は、タイムアウトになるまで保留中のままになります。

サンプルコード:

mutateAndGetPayload: ({clientMutationId, ...args}) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Resolved")
        }, 500)
    })
}, ...

ソース コードとテスト スキーマを調べると、Promise を返すことができるはずなので、何か間違ったことをしているに違いありません。ここにガイダンスはありますか?

編集:約束がうまく解決することがわかりました.私のコードの別の部分に問題があります. しかし、それがどこにあるのかについては、良い痕跡を得ることができません。

4

1 に答える 1

3

の戻り値mutateAndGetPayloadは、キーがミューテーションの構成と一致するオブジェクトであることが期待されますoutputFields。また、ペイロードにはclientMutationId、クライアント側が応答を関連するクライアント側ミューテーション トランザクションに関連付けることができるようにする必要があります。

import {mutationWithClientMutationId} from 'graphql-relay-js';
const myMutation = mutationWithClientMutationId({
  /*...*/
  outputFields: {
    foo: {type: GraphQLString, resolve: (payload) => payload.fooString},
  },
  mutateAndGetPayload() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        const payload = {fooString: 'Resolved'};
        resolve(payload);
      }, 500);
    });
  },
});

上記の例では、mutationWithClientMutationIdヘルパー fromを使用して、送信ペイロードにgraphql-relay-jsを自動的に追加しclientMutationId、正しい出力および入力タイプも追加しています。ここでそれがどのように行われるかを参照してください: https://github.com/graphql/graphql-relay-js/blob/master/src/mutation/mutation.js

于 2015-12-23T23:57:34.550 に答える