Я подключаюсь к конечной точке graphQL, чтобы получить количество реакций (например, лайков, любви и т. д.) на различные элементы контента на странице. Элементы содержимого идентифицируются идентификаторами GUID. Конечная точка не поддерживает выборку реакций для массива GUID, поэтому вместо этого я использую пакетные запросы с размером пакета 20. В этом случае конечная точка требует, чтобы каждый запрос в пакете имел уникальное имя операции. Как передать GUID в запрос GQL?
Вот мой вызов функции:
export const getReactionsByObjectIdsEngagement = async (
objectIds: string[],
apolloClient: ApolloClient<NormalizedCacheObject>
): Promise<IReaction[]> => {
const results: IReaction[] = [];
objectIds.forEach(async (contentId) => {
await apolloClient
.query({
query: GET_REACTIONS_QUERY_IP(contentId),
variables: { contentId: contentId },
context: {
clientName: EngagementClientName,
headers: {
'content-type': 'application/json',
},
},
errorPolicy: 'ignore',
})
.then((data) => {
console.info(data);
const result: IReaction = {
Id: contentId,
Reactions: {
Cool: data.data.getReactionsQuery.cool,
Like: data.data.getReactionsQuery.like,
LOL: data.data.getReactionsQuery.lol,
Love: data.data.getReactionsQuery.love,
Magic: data.data.getReactionsQuery.magic,
Party: data.data.getReactionsQuery.party,
Wow: data.data.getReactionsQuery.wow,
YouRock: data.data.getReactionsQuery.youRock,
},
};
results.push(result);
})
.catch((error) => {
console.error(error);
});
});
return results;
};
И соответствующий запрос:
export const GET_REACTIONS_QUERY_IP = (contentId: string) => {
return gql`
query getReactionsQuery($contentId: ID!) {
"${contentId}": reactionsCount(contentId: $contentId) {
like
love
wow
cool
party
youRock
magic
lol
}
}
`;
};
У меня работает сама интерполяция, но запрос не выполняется успешно, потому что клиент Apollo встречает неожиданное число или строку в имени. Сначала я подумал, что это из-за того, что мне не удалось экранировать что-то в GUID, поэтому я попытался сгенерировать случайное число в Typescript и передать его в запрос. Опять же, передача работает, но я получаю ту же ошибку в Apollo («Ожидаемое имя, получил myQuery_99»).
Пакетная обработка отлично работает с циклом forEach, запрос отображается, как и ожидалось, на вкладке Сеть инструментов разработчика в браузере.
Помогите младшему сообщить хорошие новости на следующий день. Заранее спасибо!
Если вы окажетесь здесь: проблема заключалась в дополнительном наборе кавычек вокруг моей переменной в запросе: "${contentId}"
должно быть ${contentId}
..