GraphQL 解析器 - 何时使解析器函数异步?
GraphQL resolvers - when to make resolver functions async or not?
我在制作基于 Prisma2 和 GraphQL 的 graphql-node 后端服务器时完成了这个 tutorial。本教程没有解释为什么它写了一些 Resolver 函数 async
而有些则没有。
我以为 async
被添加到与数据库交互的函数中,但你可以看到这个 resolver gets data from the database but doesn't use async
. But in this resolver 它确实使用了 async
.
有人可以解释一下为什么 async
这种看似随意的用法吗?我应该何时以及为何使用它?提前致谢。
您应该做的第一件事是阅读 Promises。 Promise 是 JavaScript 中封装仍在进行的计算的一种方式。当您与数据库或操作系统等外部服务对话时,通常就是这种情况。他们一直在替换回调样式 API。
在 GraphQL 中,解析器可以 return 一个值或 一个解析为值 的 Promise。这意味着,你可以自由选择 returning 一个值或一个 Promise,但是如果你调用像 Prisma 这样的数据库函数,你将得到一个 Promise 返回,所以你有点被迫留在“Promise land”,因为没有办法将 Promise 变成一个值。您只能链接函数,应该使用值“将来”执行(使用 then
)。
最后一个要理解的概念是async
/await
。这些异步语法是对 JavaScript 语法的补充,这使得使用 Promises 更容易。使用 await
,您可以停止执行函数,直到 Promise 中的值到达。现在,这看起来像是您正在将 Promise 变回一个值,但实际上,您 隐式地 return 是一个 Promise。为了让 VM 知道这一点,您必须通过在函数前面添加关键字 await
来声明函数可能会使用 async
。
那么什么时候使用 async
作为解析器?你可以一直这样做,而且代码是正确的。但是这样做,即使您不需要(例如,您没有与服务对话)也可能会对性能产生一些影响。所以最好只这样做,如果你真的想在某处使用 await
关键字。我希望这能让你开始了解上面的概念,真的有很多东西要学。也许只是跟着你的直觉和 TypeScript 错误走,直到你深刻理解发生了什么。
我在制作基于 Prisma2 和 GraphQL 的 graphql-node 后端服务器时完成了这个 tutorial。本教程没有解释为什么它写了一些 Resolver 函数 async
而有些则没有。
我以为 async
被添加到与数据库交互的函数中,但你可以看到这个 resolver gets data from the database but doesn't use async
. But in this resolver 它确实使用了 async
.
有人可以解释一下为什么 async
这种看似随意的用法吗?我应该何时以及为何使用它?提前致谢。
您应该做的第一件事是阅读 Promises。 Promise 是 JavaScript 中封装仍在进行的计算的一种方式。当您与数据库或操作系统等外部服务对话时,通常就是这种情况。他们一直在替换回调样式 API。
在 GraphQL 中,解析器可以 return 一个值或 一个解析为值 的 Promise。这意味着,你可以自由选择 returning 一个值或一个 Promise,但是如果你调用像 Prisma 这样的数据库函数,你将得到一个 Promise 返回,所以你有点被迫留在“Promise land”,因为没有办法将 Promise 变成一个值。您只能链接函数,应该使用值“将来”执行(使用 then
)。
最后一个要理解的概念是async
/await
。这些异步语法是对 JavaScript 语法的补充,这使得使用 Promises 更容易。使用 await
,您可以停止执行函数,直到 Promise 中的值到达。现在,这看起来像是您正在将 Promise 变回一个值,但实际上,您 隐式地 return 是一个 Promise。为了让 VM 知道这一点,您必须通过在函数前面添加关键字 await
来声明函数可能会使用 async
。
那么什么时候使用 async
作为解析器?你可以一直这样做,而且代码是正确的。但是这样做,即使您不需要(例如,您没有与服务对话)也可能会对性能产生一些影响。所以最好只这样做,如果你真的想在某处使用 await
关键字。我希望这能让你开始了解上面的概念,真的有很多东西要学。也许只是跟着你的直觉和 TypeScript 错误走,直到你深刻理解发生了什么。