2016-10-20 2 views
1

운명 API를 가지고 놀고 있는데 약간의 문제가 있습니다. 문자 세부 정보를 요청하면 객체를 반환하지만 값은 ID이므로 해당 ID에 대한 객체를 반환하는 'manifest'에 대한 다른 API 호출로 전달되어야합니다.값을 전달하는 동안 순차적 약속

'request-promise'를 사용하여 API 호출을 만들고 있지만 이는 내가 만족스럽지 않은 호출을 중첩해야한다는 것을 의미합니다.

첫 번째 요청에서 일부 데이터를 유지 한 다음 다시 한 번 호출하여 최종 데이터를 가져와야합니다.

예 :

request('destiny-character-api') 
.then(character => { 
    // Keep some of the data from character, eg className 
    request(`destiny-manifest-api/${character.item}`) 
    .then(item => { 
     // Overwrite character.item with the value of item.name 
     return item; 
    }); 
}); 

내가 첫 번째가 반환 될 때까지 두 번째 요청을 보류 한 다음 두 번째 요청으로 반환 된 값을 전달하는 방법이 필요합니다. 그래서 같은

감사

대신 중첩 호출
+0

이 상황에서 중첩에 아무런 문제가 없습니다. (외부 콜백에서 잊어 버린 '반환'을 제외하고) 완전히 유효한 해결책입니다. – Bergi

답변

1

, 당신은 chain your promises 수 : 두 번째로 첫 번째 성공 처리기에 대한 몇 가지 데이터를 전달해야하는 경우

request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}) 
.then(item => { 
    return item; 
}); 

은 다음 Promise.all()를 반환 두 번째 주소 인 request과 함께 전송할 데이터와 함께 전달합니다. 예 :

+0

안녕하십니까, 응답 주셔서 감사합니다. 첫 번째 요청의 데이터 아마 그 질문에 ... 내가 지금 편집 할 것임을 지정해야만한다. – abbott567

+0

@ abbott567 아 멋지다. 내 대답도 업데이트했습니다. –

+0

굉장! 그게 내가 찾고 있던거야! 감사 – abbott567

0

전화를 중첩하지 않으려면 요청 약속을 반환하고 플랫 스타일로 계속할 수 있습니다.

return request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}).then(item => { 
    return item; 
}); 

이렇게하면 코드가 평평 해집니다. 약속 연결에 대해 읽어보십시오.

두 번째 요청을 보류하여 무엇을 의미하는지 모르겠다.이 코드에서 두 번째 요청은 첫 번째 요청이 완료된 후에 시작됩니다.

관련 문제