Node/Apollo/GraphQL - 关于在 Apollo 服务器插件中使用 async/await 的建议
Posted
技术标签:
【中文标题】Node/Apollo/GraphQL - 关于在 Apollo 服务器插件中使用 async/await 的建议【英文标题】:Node/Apollo/GraphQL - advice on using async/await in an Apollo Server plugin 【发布时间】:2021-06-01 02:57:37 【问题描述】:关于在 apollo 插件中使用 async/await 有什么建议吗?我正在尝试等待 twilio 服务承诺并遇到Can not use keyword 'await' outside an async function
babel 解析器错误,并且不确定如何将父函数转换为异步。这是基本布局:
export const twilioVerification = async () =>
return
requestDidStart ()
return
willSendResponse ( operationName, response, context )
if (['UpdateUser', 'CreateUser', 'SignInByPhone'].includes(operationName))
const user = response.data[operationName];
if (user != null)
await sendVerificationText(user.phoneNumber);
,
;
上面的代码抛出了BABEL_PARSE_ERROR
。我尝试了多种方法将异步添加到willSendResponse
和/或requestDidStart
,结果混合不成功。作为参考,这也是我实例化 ApolloServer 的方式:
const server = new ApolloServer(
context: driver, neo4jDatabase: process.env.NEO4J_DATABASE ,
schema: schema,
introspection: process.env.APOLLO_SERVER_INTROSPECTION,
playground: process.env.APOLLO_SERVER_PLAYGROUND,
plugins: [
pushNotifications(firebase),
twilioVerification(),
]
)
【问题讨论】:
【参考方案1】:不是async
的函数是你的 函数。只需在您的willSendResponse
上添加async
。这是一种方法:
export const twilioVerification = async () =>
return
requestDidStart ()
return
willSendResponse: async ( operationName, response, context ) =>
if (['UpdateUser', 'CreateUser', 'SignInByPhone'].includes(operationName))
const user = response.data[operationName];
if (user != null)
await sendVerificationText(user.phoneNumber);
,
;
【讨论】:
以上是关于Node/Apollo/GraphQL - 关于在 Apollo 服务器插件中使用 async/await 的建议的主要内容,如果未能解决你的问题,请参考以下文章
关于在 Google Play 控制台上推出应用程序的问题,包括关于 `aewt` 和 `UID` 和 SDK、API 版本的问题