【问题标题】:Returning Promise from mutateAndGetPayload从 mutate GetPayload 返回 Promise
【发布时间】:2016-03-29 13:06:36
【问题描述】:

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

一些示例代码:

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

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

编辑:结果证明诺言解决得很好,我的代码的另一部分有问题。不过,真的无法找到任何好的痕迹。

【问题讨论】:

    标签: reactjs relayjs graphql-js


    【解决方案1】:

    预计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);
        });
      },
    });
    

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

    【讨论】:

    • 这解决了问题。我正确配置了我的输出字段的解析方法并且它刚刚工作。谢谢!
    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 2015-02-10
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2018-09-08
    • 2018-11-26
    相关资源
    最近更新 更多