可以在Apollo Server中使用GraphQL错误来处理部分成功的情况。首先要定义错误类型。例如:
const { ApolloError } = require('apollo-server');
const INVALID_ARRAY_ELEMENT = 'INVALID_ARRAY_ELEMENT';
class InvalidArrayElementError extends ApolloError {
constructor(message) {
super(message, INVALID_ARRAY_ELEMENT);
Object.defineProperty(this, 'name', { value: 'InvalidArrayElementError' });
}
}
然后在resolver中使用该错误类型来处理无效元素。例如:
const resolvers = {
Query: {
arrayOfNumbers: (_, { numbers }) => {
const result = [];
for (let i = 0; i < numbers.length; i++) {
if (isNaN(numbers[i])) {
result.push(new InvalidArrayElementError(`Invalid number: ${numbers[i]}`));
} else {
result.push(numbers[i]);
}
}
if (result.some(error => error instanceof InvalidArrayElementError)) {
throw {
errors: result.filter(error => error instanceof InvalidArrayElementError),
data: null,
};
}
return result;
},
},
};
如此一来,当数组中有无效元素时,就会抛出错误,并将data属性设置为null。如果没有无效元素,则返回正常的结果数组。