上提供的 Hello World 示例graphql.org/graphql-js http://graphql.org/graphql-js创建一个简单的 GraphQL 实现如下:
var { graphql, buildSchema } = require('graphql');
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
type Query {
hello: String
}
`);
// The root provides a resolver function for each API endpoint
var root = {
hello: () => {
return 'Hello World!';
}
};
// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
console.log(response);
});
我正在尝试在解析器中运行异步函数,例如数据库调用,但我似乎不知道如何使其工作:
我正在尝试做的事情:
var { graphql, buildSchema } = require('graphql');
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
type Query {
data: String
}
`);
// The root provides a resolver function for each API endpoint
var root = {
data: () => {
getData((data) => {
return data; // Returns from callback, instead of from resolver
}
}
};
// Run the GraphQL query '{ data }' and print out the response
graphql(schema, '{ data }', root).then((response) => {
console.log(response);
});
我尝试过使用承诺,但似乎没有办法在不输入回调的情况下逃避承诺。我还尝试了各种包装异步的方法getData
函数强制其同步,但最终必须从异步函数返回一个值,同样的问题。我觉得这不可能这么复杂,我的意思是 GraphQL-JS 是 Facebook 写的。