我正在尝试实现一个在后端使用Sequelize的GraphQL服务器(在后台使用MSSQL)。 我有一个完美的查询(从单个SQL表中检索数据)按预期工作。
然后我为同一个模式设置了一个变异,当我在GraphiQL中运行变异时,我发现它确实执行了变异解析函数内部的东西(这是创建我的Sequelize模式的一个实例) ,它不会将我的物品还给我。
现在,我认为这是因为我的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;
});
}
我找不到任何明确的解释或教程,告诉我如何构建解析函数在异步执行某些操作时需要返回的内容。或者我只是不明白,这也很可能。
答案 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;
}
}
谢谢!
答案 1 :(得分:0)
删除then
和catch
实施但无法完成,您已经遇到了承诺then
- 链。
每个then
(或catch)return
部分都会更改解析程序的返回值。
因此,在return
上添加Forecast
并在then
和catch
内返回是正确的方法
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;
}
}