【问题标题】:Wait for promise in javascript & graphql/node在 javascript & graphql/node 中等待 promise
【发布时间】:2018-04-17 18:41:24
【问题描述】:

我正在构建一个 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
}
}

【问题讨论】:

标签: javascript node.js async-await graphql es6-promise


【解决方案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});
  }

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多