如何同时调用多个突变?

时间:2016-10-30 12:21:07

标签: graphql relayjs

我有一组id,我创建了一个变异,允许我只使用1个id删除一个项目。
有没有办法使用Relay.Store.commitUpdatethis.props.relay.commitUpdate多次调用此突变?

1 个答案:

答案 0 :(得分:3)

我认为你可以将每个Relay.Store.commitUpdate包装在Promise中:

commitMutationPromise = (Mutation, data) =>
  new Promise((resolve, reject) => {
    Relay.Store.commitUpdate(new Mutation(data), {
      onSuccess: (transaction) => {
        resolve(transaction);
      },
      onFailure: (transaction) => {
        reject(transaction);
      },
    });
  }

并将您的突变作为承诺数组提交并使用Promise.all捕获结果(但请记住其快速失败行为)。 它可能是这样的:

  handleDelete = (deleteIds) => {
    const deletePromisesArray = [];
    deleteIds.forEach(id => {
        deletePromisesArray.push(
          this.commitMutationPromise(DeleteMutation, { id })
        );
    });
    Promise.all(deletePromisesArray).then(values => {
          this.onSuccessDelete(result);
        }, error => {
          this.onFailDelete(error);
        });
  }