2017-09-23 1 views
0

비동기 적으로 발생하는 웹 API에서 가져온 값을 반환해야하는 graphQL 해결 프로그램에 대한 구문을 올바르게 얻으려고합니다. 사운드의 콘솔 로깅은 내 사운드 개체 목록을 잘 보여 주지만 쿼리 결과로 리졸버가 다시 돌려 줄 수는 없습니다.graphQL resolver는 웹 API가 완료 될 때까지 기다리지 않습니다.

저는 여러 가지 시도를 해 봤지만 광범위하게 인터넷 검색을 해왔지만 여전히 웹 쿼리의 결과를 기다리는 데있어 해결사를 얻는 마법의 주문을 찾을 수 없습니다 (API 연결을 설정하는 데는 둘, 다른 하나는 실제로) 사운드 목록을 가져올 수 :

var serviceProvider = require('provider-api) 

    Query: { 
    sounds:() => { 
     serviceProvider.connect('http://soundsource.foo', 'userName', 'pass') 
     .then (function (client) { 
      client.sounds.list() 
      .then (function (sounds) { 
      console.log('Got some sounds ' + sounds) 
      }) 
     .catch(function (err) { 
     console.log('Error in sounds query ' + err) 
     }) 
     }) 
     return sounds 
    }, 
} 

지금까지 내가 위의 코드)의 변형 (수십 시도 다 똑같은 결과는 : 반환 된 객체가 null입니다.

답변

2

return 문장은 Promise 체인 외부에 있습니다. 또한 .then()에서 sounds 변수가 반환되지 않습니다. 이는 당신이

var serviceProvider = require('provider-api) 

    Query: { 
    sounds:() => { 
     return serviceProvider.connect('http://soundsource.foo', 'userName', 'pass') 
     .then (function (client) { 
      return client.sounds.list() 
      .then (function (_sounds) { 
      console.log('Got some sounds ' + _sounds) 
      return _sounds 
      }) 
      .catch(function (err) { 
      console.log('Error in sounds query ' + err); 
      return err 
      }) 
     }) 
     .catch(function(err) { 
     console.log(err) 
     }) 
    }, 
} 
+2

를 참조하는 sounds 변수가 나는 동일한 논리를 시도했다로 ** 내가 처음 약속을 반환하지 않았다 제외 **, 혼동을 피하기 위해 .then()에서 매개 변수의 이름을 조정 고려 체인에 Doh !! 정말 고마워!! – capouch

관련 문제