Это ваш код:
const data = {
getDate(args) {
var params = {
TableName: 'delete_this',
Key: {
"id": args.id
}
};
client.get(params, function(err,data){
if(err){
console.log('error occured '+err)
}else{
console.log(data)
}
});
},
};
const resolvers = {
Query: {
getDate: (root, args) => data.getDate(args),
},
};
Вы видите эту ошибку, потому что getDate
является ненулевым полем в вашей схеме, но оно разрешается равным нулю.Ваш распознаватель должен вернуть либо значение соответствующего типа, либо Promise, который разрешит это значение.Если вы измените data
таким образом
const data = {
getDate(args) {
return {
id: 'someString',
transaction_date: 'someString',
}
}
}
, вы увидите, что ошибка исчезнет.Конечно, ваша цель - вернуть данные из вашей базы данных, поэтому нам нужно добавить этот код обратно. Однако в существующем коде используется обратный вызов.Все, что вы делаете внутри обратного вызова, не имеет значения, потому что оно запускается после , когда возвращается ваша функция распознавателя.Поэтому вместо этого нам нужно использовать Promise.
Хотя вы можете обернуть функцию обратного вызова с Promise , в aws-sdk
этого не требуется, поскольку более новые версии поддерживают Promises.Что-то вроде этого должно быть достаточно:
const data = {
getDate(args) {
const params = //...
// must return the resulting Promise here
return client.get(params).promise().then(result => {
return {
// id and transaction_date based on result
}
})
}
}
Или используя синтаксис async / await:
const data = {
async getDate(args) {
const params = //...
const result = await client.get(params).promise()
return {
// id and transaction_date based on result
}
}
}