在GraphQL中发送包含错误的部分列表

时间:2018-01-25 01:54:43

标签: graphql apollo

使用返回列表的查询:

{
  users(first: 10) {
    messages(first: 10) {
      foo
    }
  }
}

和消息解析器 -

const errors = [];

async function messagesResolver(user, {first}, ctx, info) {
  const messages = await Promise.all(
    user.messages.map(
      messageId => fetch(messageId).catch(e => {
        // Collect error
        errors.push(err);

        // Ignore this failed message id
        return null;
      })
    )
  );

  // TODO:
  // How do I add errors to the list of errors
  // sent to the client

  return messages.filter(m => m != null);
}

是否可以只返回获取成功的消息的部分列表?是否可以发送错误并让客户决定如何处理错误?

使用错误替换消息会在一定程度上执行此操作,但解析后的列表中包含null值 -

messages = [ { 1 }, { 2 }, new Error(3), { 4 }, new Error(5) ]

解析为

data = [ { 1 }, { 2 }, null, { 4 }, null ]
errors = [ Error(3), Error(5) ]

但是,是否可以通过其他API(例如info.addError(new Error(3)))发送错误以获得以下结果?

data = [ { 1 }, { 2 }, { 4 } ]
errors = [ Error(3), Error(5) ]

0 个答案:

没有答案