Javascript 如何解决nodejs+;graphql?
我想做的是先上传图片,然后将链接保存到db中的用户 这是我的graphql解析器:Javascript 如何解决nodejs+;graphql?,javascript,node.js,graphql,Javascript,Node.js,Graphql,我想做的是先上传图片,然后将链接保存到db中的用户 这是我的graphql解析器: resolve: async (_root, args, { user, prisma }) => { .... const params = { Bucket: s3BucketName, Key: fileName, ACL: 'public-read', Body: file.creat
resolve: async (_root, args, { user, prisma }) => {
....
const params = {
Bucket: s3BucketName,
Key: fileName,
ACL: 'public-read',
Body: file.createReadStream(),
ContentType: file.mimetype,
};
return s3.putObject(params, async function (error, data) {
if (error) {
return {
message: error,
success: false,
};
} else {
// user has updated
if (user.profileImg)
return prisma.user
.update({
where: { id: Number(user.id) },
data: {
profileImg: fileName,
},
})
.then(
(response) => {
console.log('response: ', response);
return {
message: 'Success',
success: true,
};
},
(error) => {
return {
message: error,
success: false,
};
}
);
else {
return {
message: 'Success',
success: true,
};
}
}
});
},
我想做的是从s3返回,但我的问题是,我认为它返回时没有这个解析,返回null,所以emmage和success不会返回。如何使用s3构造函数解析程序?您应该
从解析程序返回新的承诺
,而不是使其异步
,这样您可以从嵌套回调中显式地解析()
或拒绝()
resolve:(_root,args,{user,prisma})=>{
返回新承诺((解决、拒绝)=>{
s3.putObject(参数,异步(错误,数据)=>{
如果(错误){
退货拒绝({
消息:error.message,
成功:错
});
}
试一试{
等待prisma.user.update();
返回解析({
信息:“成功”,
成功:真的
});
}捕获(e){
退货拒绝({
信息:e.message,
成功:错
});
}
});
});
};
如果您想继续使用async/await
范例,请围绕s3.putObject
制作一个实用程序/承诺包装器
函数putObject(…参数){
返回新承诺((解决、拒绝)=>{
s3.putObject(…参数,异步(错误,数据)=>{
如果(错误){
返回拒绝(错误);
}
返回解析(数据);
});
});
}
解析:异步(_root,args,{user,prisma})=>{
试一试{
常量响应=等待putObject(参数);
等待prisma.user.update();
返回{
信息:“成功”,
成功:真的
};
}捕获(错误){
返回{
消息:error.message,
成功:错
};
}
};
用.then和.catch而不是.then(()=>{})提问。catch(()=>{})我可以用这个吗。然后(res=>{//fulfillment},error=>{//rejection})@gpbaculio是的,.then()
的第二个参数可以用作异常处理程序。