我正在构建一个graphql服务器,其中一个解析器应该返回一个从aws api中获取的url。我已经在几个小时内尝试过承诺,异步等待,但还没有任何工作。
以下代码中会发生什么: 1)我打电话给aws api,并在回调中获得一个签名的url。 2)我想在graphql解析器函数中返回该url - getSignedURL
我的问题是:如何使解析器函数返回我在其他函数回调中得到的结果?
我将不胜感激任何帮助!
IN CLASS S3Store
var s3 = new aws.S3();
newSignedUrl(callback){
var params = {
Bucket: 'testBucket28993746',
Key: uuid.v4(),
Expires: 100,
ContentType: 'image/jpg'
};
s3.getSignedUrl('putObject', params, (err, signedURL)=>{
callback(err,signedURL);
});
}
Graphql解析器
getSignedURL(){//TODO: more secure, require auth first
let newURL = null;
s3store = new S3Store();
s3store.newSignedUrl((err,result)=>{
if(err){
console.log(err)
newURL = {}
} else{
console.log(result);
newURL = result;
}
});
return newURL;
},
当我调用graphql端点时,我得到以下信息:
{
"data": {
"getSignedURL": null
}
}
答案 0 :(得分:1)
这对我说:
IN CLASS S3Store
getSignedUrl(){
var params = {
Bucket: 'testBucket28993746',
Key: uuid.v4(),
Expires: 100,
ContentType: 'image/jpg'
};
return new Promise ((resolve, reject)=> { s3.getSignedUrl('putObject',params, (err, signedURL)=>{
if(err){
reject(err);
} else {
resolve( signedURL);
// console.log(signedURL);
console.log("in else ")
}
})
})
}
Graphql解析器
getSignedURL(){
return new S3Store().getSignedUrl().then((url)=> {return url});
}