在带有 Sequelize 的 GraphQL Mutation 中,我必须 return 做什么?

What must I return in a GraphQL Mutation with Sequelize?

我正在尝试实现一个在后端使用 Sequelize 的 GraphQL 服务器(以便在幕后使用 MSSQL)。 我有一个按预期完美运行的查询(从单个 SQL table 检索数据)。

但后来我为相同的模式设置了一个突变,当我 运行 GraphiQL 中的突变时,我发现,虽然它确实执行了突变的解析函数中的内容(这是创建一个我的 Sequelize 模式的实例),它不会 return 我的对象返回给我。

现在,我认为这是因为我的 Sequelize .create 函数 returns promise and resolve 无法处理?

这是我目前得到的:

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;
  });
}

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

@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;
    }
  }

谢谢!

删除 thencatch 实现有效但不应该这样做,您遇到了承诺 then 链。 每个 then(或捕获)return 部分都会更改解析器的返回值。

因此,在 Forecast 和 returns 上添加 return,在 thencatch 中添加 return 是正确的做法

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;
    }
  }