我正在努力为 graphQL 解析器获取正确的语法,该解析器需要返回从 Web API 获取的值,这是异步发生的。声音的控制台日志记录很好地显示了我的声音对象列表,但我无法将其作为查询结果由解析器返回。
我已经尝试了很多方法,并在 Google 上进行了广泛的搜索,但仍然找不到让解析器等待网络查询结果的神奇咒语(需要两个,一个建立 API 连接,另一个实际上获取声音列表):
var serviceProvider = require('provider-api)
Query: {
sounds: () => {
serviceProvider.connect('http://soundsource.foo', 'userName', 'pass')
.then (function (client) {
client.sounds.list()
.then (function (sounds) {
console.log('Got some sounds ' + sounds)
})
.catch(function (err) {
console.log('Error in sounds query ' + err)
})
})
return sounds
},
}
到目前为止,我尝试过的所有操作(上述代码的数十种变体)都导致了同样的结果:返回的对象为 null
。
最佳答案
return
语句位于 Promise
链之外。此外,sounds
变量不会从 .then()
返回。考虑调整 .then()
处的参数名称,以避免混淆您正在引用哪个 sounds
变量
var serviceProvider = require('provider-api)
Query: {
sounds: () => {
return serviceProvider.connect('http://soundsource.foo', 'userName', 'pass')
.then (function (client) {
return client.sounds.list()
.then (function (_sounds) {
console.log('Got some sounds ' + _sounds)
return _sounds
})
.catch(function (err) {
console.log('Error in sounds query ' + err);
return err
})
})
.catch(function(err) {
console.log(err)
})
},
}
关于javascript - graphQL 解析器不等待 Web API 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46383945/