javascript - graphQL 解析器不等待 Web API 完成

标签 javascript node.js promise graphql

我正在努力为 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/

相关文章:

javascript - 如何在 Promise 上注册失败的 Mocha 测试

javascript - 如何在 js 或 jquery 中迭代此 XML API 响应

javascript - getBBox 函数从动态创建的文本 SVG 节点返回具有零值属性的对象

javascript - 扩展 `Promise` 并更改 `then` 签名

node.js - 如何设置包含多个应用程序的 Dojo 构建流程?

node.js - 使用 GitHub Webhook 使用 dockerimage 转发到 Jenkins 时出现 Nodejs 错误 "EPROTO"

javascript,promises,如何在 then 范围内访问变量 this

javascript - 匹配内部代码,无论任何换行文本如何

javascript - jQuery 中列表不显示?

node.js - 模拟/测试 Mongodb 数据库 Node.js