【发布时间】:2019-01-17 16:57:34
【问题描述】:
如果我像这样从 graphql 解析器返回查询:
someResolver = () => SomeModel.find()
它只是工作并以数据库结果响应。
这是怎么回事?例如,为什么我不必打电话给.exec()?
【问题讨论】:
标签: node.js mongodb mongoose graphql
如果我像这样从 graphql 解析器返回查询:
someResolver = () => SomeModel.find()
它只是工作并以数据库结果响应。
这是怎么回事?例如,为什么我不必打电话给.exec()?
【问题讨论】:
标签: node.js mongodb mongoose graphql
虽然Model.find() 返回一个Query,但它是一个PromiseLike 类型。
这里是文档:http://mongoosejs.com/docs/promises.html#built-in-promises
并且,在graphql resolver 中,您可以返回promise 或使用async/await 或只返回一个常量值
https://graphql.org/learn/execution/#asynchronous-resolvers
在执行期间,GraphQL 将等待 Promises、Futures 和 Tasks 完成后再继续,并且会以最佳并发性完成。
Model.find().exec() 返回一个成熟的承诺,它也可以正常工作。
【讨论】:
.find() 和.exec() 以及解析器执行时间的mongoose 问题。那是另一个问题。你可以看看github.com/facebook/dataloader