从 mutateAndGetPayload 返回 Promise

Returning Promise from mutateAndGetPayload

我正在尝试 return 来自 mutationWithClientMutationIdmutateAndGetPayload 函数的 Promise,但我似乎无法得到回复。该请求在超时之前一直处于待处理状态。

一些示例代码:

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

查看源代码和测试模式应该可以 return 一个 Promise,所以我一定是做错了什么。这里有什么指导吗?

编辑:原来 promise 解决得很好,我的代码的另一部分有问题。虽然无法真正找到关于它在哪里的任何好的痕迹。

预计 mutateAndGetPayload 的 return 值是一个对象,其键与突变的配置 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);
    });
  },
});

上面的示例使用 graphql-relay-js 中的 mutationWithClientMutationId 帮助程序自动将 clientMutationId 添加到传出有效负载,以及正确的输出和输入类型。看看它是如何做到的,在这里:https://github.com/graphql/graphql-relay-js/blob/master/src/mutation/mutation.js