2017-12-11 5 views
-2

저는 ES6 약속을 처음 접했고 두 가지 약속을 약속드립니다. 제가 가지고있는 문제는 첫 번째 약속의 결과를 두 번째 .then() 진술서로 전달하고 싶다는 것입니다.ES6 약속 - 올바른 방법으로 체인을 약속하고 인수를 전달합니다.

export function resolvePage(pageName, contentType) { 
    return contentful.fetchContentByQuery(contentType, { 
     'fields.slug': pageName, 
    }) 
    .then((resOne) => { 
     return contentful.client.getEntries({ 
      'content_type': 'blogArticle' 
     }) 
    }) 
    .then((resTwo) => { 
     console.log(resOne) 
     console.log(resTwo) 

     return Promise.reject(); 
    }); 
} 

나는이 제대로 체인의 끝에 그래서 내가 모두 약속 결과에 액세스 할 수있는 방법 체인 알아낼 수없는 것 : 여기 내가 지금까지 가지고있는 것입니다. 누군가가 올바른 방향으로 나를 가리켜 주며 내가 잘못 가고있는 곳을 말해 줄 수 있습니까? 나는 resOne을 매개 변수로 두 번째 then 문으로 전달하려고 시도했지만 여전히 작동하지 않습니다.

답변

0

, 당신은/비동기로이 비교적 쉽게 할 두 가지 약속을 어떻게 처리할지

const {result1, result2} = await Promise.all([promise1, promise2]);

기다리고 있습니다. 둘 다 해결되면 각각 result1result2의 값을 얻습니다. 그런 다음 일반 값으로 처리 할 수 ​​있습니다. 이것은 콜백 크리스마스 트리에 인수를 전달하지 못하도록;)

+1

왜 downvote. 질문이 중복 일지라도 현재 답변은 모두 유효합니다. –

0

이전 결과에 대한 액세스가 필요하면 내부 약속을 연결해야합니다. 이것은 추가 수준의 들여 쓰기를 추가하지만 (슬프게도) 비동기/대기를 사용할 수 없다면이 작업을 수행하는 가장 깨끗한 방법 일 것입니다.

그래서 당신의 조각에 대한

: 당신이 ES6 코드를 사용 여부에 따라

export function resolvePage(pageName, contentType) { 
    return contentful.fetchContentByQuery(contentType, { 
     'fields.slug': pageName, 
    }) 
    .then((resOne) => { 
     return contentful.client.getEntries({ 
      'content_type': 'blogArticle' 
     }).then((resTwo) => { 
      // Note that this is now chaining on the inner promise 
      // So it has access to resOne via the closure. 
      console.log(resOne) 
      console.log(resTwo) 

      return Promise.reject(); 
     }) 
    }); 
}