如何从 Graphql 解析函数中的回调返回值?
Posted
技术标签:
【中文标题】如何从 Graphql 解析函数中的回调返回值?【英文标题】:How to return value from callback in Graphql resolve function? 【发布时间】:2017-11-01 19:18:35 【问题描述】:如何从回调函数返回值并将其传递给 Graphql 中的解析函数?
这里是展示这个概念的虚拟代码:
这个函数运行sql查询:
function runQuery(query, cb)
....
var value = "Something";
cb(null, value);
这会将回调函数中的值传递给graphql中的解析函数:
function getTitle()
return runQuery("...", function(err, value)
return value;
);
Graphql 架构:
var SampleType = new GraphQLObjectType(
name: 'Sample',
fields: () => (
title: type: GraphQLString ,
),
);
query: new GraphQLObjectType(
name: 'Query',
fields: () => (
sample:
type: SampleType,
resolve: () => getTitle(),
,
),
),
【问题讨论】:
【参考方案1】:基本上,您可以围绕该 runQuery 创建一个承诺,以便在使用查询数据时可以使用异步等待
const getTitle = () =>
return new Promise((resolve, reject) =>
runQuery("...", (error, response) => !error
? resolve(response)
: reject(error))
)
const asyncFunction = async () =>
const data = await getTitle()
.then((response) =>
// handle response and return what you want
return response.data
)
.catch((error) =>
// handle error, log it, etc, in whatever way you want
console.log(error.message)
return null
)
if(data) // data is valid
// do what you want with the valid data (no error)
else // there was an error
// handle if there is an error
asyncFunction()
【讨论】:
可以通过添加有关此代码 sn-p 如何回答问题的说明来改进此答案。【参考方案2】:您可以使用 Promise 和 async
来完成此操作。
async function getTitle()
const queryResult = await runQuery("...");
// ...
// Do post-query stuff here that you currently have in your callback
// ...
return queryResult
async function runQuery()
const value = 'something';
// ...
return value;
节点fully supports async/await as of 7.10.0。如果您在浏览器中或被锁定在较低版本的节点中,请使用 TypeScript 或 Babel。
【讨论】:
以上是关于如何从 Graphql 解析函数中的回调返回值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 type-graphql 解析器函数获取 graphql 后端中的选定字段?
如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定
如何使用 fetch 从 Promise 回调中返回返回值? [复制]