Вы должны return new Promise
из вашего преобразователя, вместо того, чтобы делать это async
таким образом, вы можете явно resolve()
или reject()
из вложенного обратного вызова.
resolve: (_root, args, { user, prisma }) => {
return new Promise((resolve, reject) => {
s3.putObject(params, async (error, data) => {
if (error) {
return reject({
message: error.message,
success: false
});
}
try {
await prisma.user.update();
return resolve({
message: "Success",
success: true
});
} catch (e) {
return reject({
message: e.message,
success: false
});
}
});
});
};
Если вы хотите оставайтесь в парадигме async/await
, создайте служебную программу / обещание-обертку вокруг s3.putObject
;
function putObject(...params) {
return new Promise((resolve, reject) => {
s3.putObject(...params, async (error, data) => {
if (error) {
return reject(error);
}
return resolve(data);
});
});
}
resolve: async (_root, args, { user, prisma }) => {
try {
const response = await putObject(params);
await prisma.user.update();
return {
message: "Success",
success: true
};
} catch (error) {
return {
message: error.message,
success: false
};
}
};