我必须使用Sequelize在GraphQL Mutation中返回什么内容?

时间:2016-02-05 13:15:25

标签: sequelize.js graphql graphql-js

我正在尝试实现一个在后端使用Sequelize的GraphQL服务器(在后台使用MSSQL)。 我有一个完美的查询(从单个SQL表中检索数据)按预期工作。

然后我为同一个模式设置了一个变异,当我在GraphiQL中运行变异时,我发现它确实执行了变异解析函数内部的东西(这是创建我的Sequelize模式的一个实例) ,它不会将我的物品还给我。

enter image description here

现在,我认为这是因为我的Sequelize .create函数返回一个promise并且解决方法无法解决这个问题?

这是我到目前为止所得到的:

resolve(_,args){
  Forecast.create({
    bunit: args.bunit,
    season: args.season,
    position: args.position,
    currency: args.currency,
    settle_date: new Date(args.settle_date),
    reference: args.reference
  }).then(forecast => {
    return forecast;
  }).catch(err => {
    console.error(err);
    return err;
  });
}

我找不到任何明确的解释或教程,告诉我如何构建解析函数在异步执行某些操作时需要返回的内容。或者我只是不明白,这也很可能。

2 个答案:

答案 0 :(得分:1)

@ Adam的上述建议在这个例子中起作用。 我很惊讶我们不需要阅读.create方法调用的承诺,但它似乎工作得很好。

resolve(_,args){
      return Forecast.create({
        bunit: args.bunit,
        season: args.season,
        position: args.position,
        currency: args.currency,
        settle_date: new Date(args.settle_date),
        reference: args.reference
      });
      // .then(forecast => {
      //   console.error(err);
      //   //return forecast;
      // }).catch(err => {
      //   console.error(err);
      //   //return err;
      // });

      //return newForecast;
    }
  }

this related answer

谢谢!

答案 1 :(得分:0)

删除thencatch实施但无法完成,您已经遇到了承诺then - 链。 每个then(或catch)return部分都会更改解析程序的返回值。

因此,在return上添加Forecast并在thencatch内返回是正确的方法

resolve(_,args){
      return Forecast.create({
        bunit: args.bunit,
        season: args.season,
        position: args.position,
        currency: args.currency,
        settle_date: new Date(args.settle_date),
        reference: args.reference
      });
       .then(forecast => {
         console.error(err);
         return forecast;
       }).catch(err => {
         console.error(err);
         return err;
       });

      return newForecast;
    }
  }