4

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

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

在此处输入图像描述

现在,我认为这是因为我的 Sequelize.create函数返回了一个承诺,而 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;
  });
}

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

4

2 回答 2

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

在此处输入图像描述

谢谢!

于 2016-02-05T14:43:37.323 回答
0

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

因此,return在 AND 中的 AND 返回上添加Forecasta是正确的方法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;
    }
  }
于 2016-12-22T13:42:39.800 回答