2017-11-07 1 views
1

나는 promise.all을 비동기식으로 기다리고 싶다는 몇 가지 약속 함수를 가지고있다. 그러나 나는 그들 중 하나에 '그때'사슬이있을 때 그것을 어떻게하는지 잘 모르겠습니다.async는 체인이있는 Promise.all을 기다린다

예를 들면.

Promise.all([ 
    promiseFn1(), 
    promiseFn2().then(promiseFn3) 
]) 

어떻게 promiseFn2()Promise.all 내부에 체인 때 기다리고 비동기 구현하는 것이? 내가 annoynmous 기능을 생각하고 있지만, 선호

하지 않음 :

await Promise.all([ 
    promise1.fn(), 
    (() =>{ 
     p2response = await promise2Fn(); 
     return promise3Fn(p2response); 
    })() 
]) 
+0

'Promise.all ( promiseFn1(), promiseFn3 (promiseFn2()) )'? –

+0

'promiseFn3()'을'promiseFn2()'안에'then() '으로 이동하십시오. –

+0

@PatrickRoberts 아니요, [처리되지 않은 거부로 이어질 수 있습니다] (https://stackoverflow.com/questions/46889290/waiting-for-more) -than-one-concurrent-await-operation) – Bergi

답변

3

예, 즉시 실행이 할 수 async 기능 발현 : 나는에게 추천 할 것입니다 그러나

await Promise.all([ 
    promise1.fn(), 
    (async() => promise3Fn(await promise2Fn()))() 
]) 

을 훨씬 간단하게 .then() 전화를 유지하십시오. 단지라는 이름의 도우미 함수를 사용하여, 당신은 깨끗한 코드를 찾고 있다면 또한 ...

당신이 사방 await 사용하는 어떤 세력을하지처럼 (그리고 then 체인은 당신의 예에서와 같이 간단하지 않습니다하지만 함수 표현식을 포함한다) : 당신이 동시에 await를 사용할 때 함수 내에서 실행이 항상 순차적으로

async function promise2and3fn() { 
    return promise3Fn(await promise2Fn()); 
} 
await Promise.all([ 
    promise1.fn(), 
    promise2and3fn() 
]) 

, 이러한 추가 기능의 주위에 방법은 없습니다.

+0

나는'.then()'호출이 다른 말도 안되는 것보다 훨씬 읽기 쉽다고 동의한다. –

+0

필자의 예는 promise2 & 3을 크게 단순화했기 때문에 필자가 작성한 깨끗한 방법이 있는지 궁금해하고있었습니다. 그것을 함수로 명명해야 할 수도 있습니다. 타이 –

관련 문제