2017-11-05 3 views
0

저는 그래프 서버를 만들고 있는데, 리졸버 중 하나는 aws API에서 가져온 URL을 반환해야합니다. 약속을 몇 시간 만에 시도했지만 비동기가 기다리고 있지만 아직까지는 아무 것도 작동하지 않았습니다.자바 스크립트 및 그래프/노드에서 약속 기다리기

코드 i에서 다음과 같은 일이 발생합니다. 1) aws api를 호출하고 콜백에 서명 된 URL을 가져옵니다. 2) graphql resolver 함수에서 해당 URL을 반환하고 싶습니다. - getSignedURL

제 질문은 : resolver 함수가 다른 함수 콜백에있는 결과를 반환하도록하려면 어떻게해야합니까?

어떤 도움을 주셔서 감사합니다! CLASS S3Store IN

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

그렇지 않으면이 단지 중복 당신이 약속 시도 무엇을 우리에게 보여주십시오 [내가 어떻게 변환합니까을 S3Store 약속하는 기존 콜백 API?] (https://stackoverflow.com/q/22519784/1048572) – Bergi

답변

0

이 woked ...에 대한 나 : 클래스

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}); 
    } 
관련 문제