使用promises的GraphQL解析

时间:2017-06-15 20:50:27

标签: javascript node.js graphql

我是JavaScript和NodeJS领域的新手。我在Java和C#方面都有很多经验,但这对我来说都很新鲜。

作为POC,我正在尝试使用GraphQL打包salesforce。由于对salesforce的调用是异步的,因此我想在定义模式和基础查询之间的绑定时返回对GraphQL的承诺。

然而,当我这样做时,我收到消息“Expected Iterable,但没有为字段Query.getAccounts找到一个。”

这是我非常糟糕的代码:

conn.login('username', 'password' + 'security-token', function(err, userInfo) {
  if (err) {
    console.log(err);
    console.log("Cannot login to Salesforce");
  } else {
    var root = {
      getAccounts: function ({offset, limit}) {
        return new Promise(function(resolve, reject) {
          conn.query("SELECT Id, Name FROM Account", function(err, result) {
            if (err) {
              reject();
            }
            resolve(result);
          });
        });
      }
    }


    var app = express();
    app.use('/graphql', graphqlHTTP({
      schema: schema,
      rootValue: root,
      graphiql: true,
    }));
    app.listen(4000);
    console.log('Running a GraphQL API server at localhost:4000/graphql');
  }
});

我应该使用阿波罗吗?

1 个答案:

答案 0 :(得分:0)

这里的问题是Salesforce的响应不是列表格式。因此,我不得不将另一个承诺链接起来,以便从响应中提取我关心的实际数据。

基本上,它是来自GraphQL的误导消息。