Как я могу продолжить выполнение другой операции после возврата в преобразователях GraphQL.
пакеты
import { ApolloServer } from "@apollo/server";
import { typeDefs } from "./definitions";
import { resolvers } from "./resolvers";
import { makeExecutableSchema } from "graphql-tools";
import { applyMiddleware } from "graphql-middleware";
import { shield, allow } from "graphql-shield";
import { permissions } from "./shield/permissions";
Код
createOrder: async (_: any, args: MutationCreateOrderArgs, ctx: IContext) => {
const sendToGoogleSheetsPromise....
const sendToConversionApiPrmise....
return ctx.order.create()
}
Промисы почему-то отменились после возврата, не хочу ждать их всех или использовать Promise.all.
Есть ли что-то вроде waitUntil() у работников сферы обслуживания?
обещания — это операции с базой данных, такие как ctx.db.model.create, а также операции ввода-вывода.
@jeeves Я использую сервер Apollo, API nextjs.





Вы уверены, что обещание отменяется или вы просто потеряли ссылку на обещание и, следовательно, разрешенный результат??
Возможное решение — вернуть разрешенное создание заказа и вернуть неразрешенные обещания других вызовов функций.
createOrder: async (_: any, args: MutationCreateOrderArgs, ctx: IContext) => {
const sendToGoogleSheetsPromise....
const sendToConversionApiPrmise....
const order = await ctx.order.create();
return {
order,
sendToGoogleSheetsPromise,
sendToConversionApiPrmise
}
}
только порядок, необходимый в ответе, я хочу, чтобы другие операции выполнялись в фоновом режиме. Возможно, я буду использовать очереди сообщений, такие как BullMQ.
Также помогает использование подписки в качестве веб-перехватчика для параллельной работы, к такому выводу я пришел после некоторых исследований.
Если вы хотите выполнять операции асинхронно после возврата из функции преобразователя в GraphQL, не дожидаясь их завершения, вы можете добиться этого, отключив асинхронные задачи от основного потока выполнения. Один из способов сделать это — использовать систему фоновой обработки заданий, например очереди.
createOrder: async (_: any, args: MutationCreateOrderArgs, ctx: IContext) => {
enqueueTask(sendToGoogleSheets);
enqueueTask(sendToConversionApi);
return ctx.order.create();
}
Функция преобразователя возвращается сразу после постановки задач в очередь, не дожидаясь их завершения.
После многих дней изучения того, как это сделать, я напишу несколько решений, которые могут помочь.
fetch в свой собственный API.next/after, он был создан в NextJS 15 RC (бета-версия).
Вы уверены, что обещание отменяется, или вы просто потеряли ссылку на обещание и разрешенный результат.