2017-09-22 6 views
0

내가 [개체 개체] 반환 비동기로 가져오고 기다리고 사용이 공용 API를 가져 오기 위해 노력하고 있지만, 방법을 가져 해요 :은/기다리고 반환 [개체 개체]

나 '클래스를 API를 가져 오기 위해 사용하고 있습니다 : API가 반환

class FetchAnimalApi { 
    async getAnimalInfo(animal) { 
    const request = await fetch(`http://my_api_url.com/${animal}`); 
    const response = await request.json(); 

    return `${animal} goes like ${response.sound}`; 
    } 
} 

구조 (동물이 돼지 인 경우) :

{"color": "pink", "sound": "roinc"} 

내가 다른 파일에 내 수업을 수입으로 전화 드렸습니다은 :

const animals = new FetchAnimalApi(); 
console.log(animals.getAnimalInfo('pig')); 

그래서 내가 뭘 잘못하고 있니?

편집 :

지금 내을 console.log()가 I 인쇄 할 정확히 보여 주지만, 나는 응답을 반환 할 때, 난 아직도 [개체 개체]를 받고 있어요 :

function getInfo() { 
    const animals = new FetchAnimalApi(); 

    return animals.getAnimalInfo('pig').then(result => result); 
} 

동안을 디버깅, 나는 const request = await fetch(http://my_api_url.com/ $ {animal} ) 행이 실행 된 직후 [object object]가 내 화면에 인쇄되고 있다는 것을 깨달았습니다.

+0

'[개체 개체]'단지 때문에 최종 출력에 문자열 변환의 아마. 출력을'console.log()'하면, 원하는 객체가 보일 것입니다. 템플릿 리터럴에 객체를 넣을 수없고 속성을 출력 할 수 없습니다. 또한,'getAnimailInfo()'는 약속을 반환한다. 그래서, 당신은 그 약속으로부터 가치를 얻기 위해서'await' 또는'.then()'을 사용해야합니다. – jfriend00

+0

@ jfriend00 _ 개체를 템플릿 리터럴에 넣을 수없고 속성을 출력 할 수 없습니까? 왜 그렇게 생각하니? – alexmac

+0

@alexmac : 템플릿 리터럴은 "인수"를 문자열로 변환하고 객체의 기본 문자열 표현은 속성 목록이 아닌'[object Object]'입니다. –

답변

2

이렇게하면 console.log(animals.getAnimalInfo('pig'));으로 전화 할 수 없습니다. animals.getAnimalInfo는 약속을 반환합니다. 결과를 얻으려면, 당신은 then 콜백 사용해야합니다

const animals = new FetchAnimalApi(); 
animals 
    .getAnimalInfo('pig') 
    .then(result => console.log(result)); 
+0

OP는 다른 곳에서는'await'을 사용하기 때문에 대답은 아마도'.then()'뿐만 아니라'await'을 옵션으로 제공해야합니다. – jfriend00

+0

'async/await'를 사용하여 해결책을 제안하려고했지만이 컨텍스트에서는 의미가 없습니다. getAnimalInfo()의 결과를 출력하는 새로운 함수를 생성하십시오 ... – alexmac

+0

조금 도와 줬습니다! 그러나 여전히 성공하지 못했습니다.) 나는 더 이상 설명하지 않는 질문을 편집했습니다. – Anna