1

我试图从 a 的mutateAndGetPayload函数返回一个 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帮助器 fromgraphql-relay-js自动添加clientMutationId到传出的有效负载,以及正确的输出和输入类型。在这里查看它是如何做到的:https ://github.com/graphql/graphql-relay-js/blob/master/src/mutation/mutation.js

于 2015-12-23T23:57:34.550 回答