gpt4 book ai didi

javascript - 解决 Graphql 的异步函数无法返回在具有 rdf 数据的 Stardog 服务器上查询的数据

转载 作者:搜寻专家 更新时间:2023-11-01 00:22:05 25 4
gpt4 key购买 nike

我正在尝试使用 graphql 查询 stardog 服务器,下面是我的代码。

import {
GraphQLSchema,
GraphQLObjectType,
GraphQLInt,
GraphQLString,
GraphQLList,
GraphQLNonNull,
GraphQLID,
GraphQLFloat
} from 'graphql';

import axios from 'axios';

var stardog = require("stardog");

let Noun = new GraphQLObjectType({
name: "Noun",
description: "Basic information on a GitHub user",
fields: () => ({
"c": {
type: GraphQLString,
resolve: (obj) => {
console.log(obj);
}
}
})
});

const query = new GraphQLObjectType({
name: "Query",
description: "First GraphQL for Sparql Endpoint Adaptive!",
fields: () => ({
noun: {
type: Noun,
description: "Noun data from fibosearch",
args: {
noun_value: {
type: new GraphQLNonNull(GraphQLString),
description: "The GitHub user login you want information on",
},
},
resolve: (_,{noun_value}) => {
var conn = new stardog.Connection();

conn.setEndpoint("http://stardog.edmcouncil.org");
conn.setCredentials("xxxx", "xxxx");
conn.query({
database: "jenkins-stardog-load-fibo-30",
query: `select ?c where {?s rdfs:label '${noun_value}'. ?c rdfs:subClassOf ?s}`,
limit: 10,
offset: 0
},
function (data) {
console.log(data.results.bindings);
return data.results.bindings;
});
}
},
})
});

const schema = new GraphQLSchema({
query
});

export default schema;

查询已成功执行,我可以在控制台上看到结果,但是 return data.results.bindings; inside function(data) 没有将此结果返回到Noun 类型系统在 resolve: (obj) => { console.log(obj); 并且返回的 obj 显示为 null,而不是从 GraphQL 查询返回的结果 bindings。如果有人可以帮助我弄清楚我在这里缺少什么,那就太好了。

提前致谢,亚什帕尔

最佳答案

在您的查询中,noun 字段的resolve 函数是一个异步操作(查询部分)。但是你的代码是同步的。因此,解析函数实际上没有立即返回任何内容。这导致没有任何内容传递给 Noun GraphQL 对象类型的解析函数。这就是为什么当你打印 obj 时你得到 null 的原因。

resolve 函数中的异步操作的情况下,您必须返回一个以预期结果解析的 promise 对象。您还可以使用 ES7 异步/等待功能;在这种情况下,您必须声明 resolve: async (_, {noun_value}) => {//awaited code}

Promise ,代码如下所示:

resolve: (_,{noun_value}) => {
var conn = new stardog.Connection();

conn.setEndpoint("http://stardog.edmcouncil.org");
conn.setCredentials("xxxx", "xxxx");
return new Promise(function(resolve, reject) {
conn.query({
database: "jenkins-stardog-load-fibo-30",
query: `select ?c where {?s rdfs:label '${noun_value}'. ?c rdfs:subClassOf ?s}`,
limit: 10,
offset: 0
}, function (data) {
console.log(data.results.bindings);
if (data.results.bindings) {
return resolve(data.results.bindings);
} else {
return reject('Null found for data.results.bindings');
}
});
});
}

关于javascript - 解决 Graphql 的异步函数无法返回在具有 rdf 数据的 Stardog 服务器上查询的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com