2016-11-09 1 views
0

나는 약속을하고, aprimeise는 서버를 호출하며, 약속 안함, 비동기 적으로 호출되는 notAPromise를 호출합니다. 결과. 나는이 아니라는 바로 Promise.all에 동기 notAPromise을 넣을 수 있나요Promise.all에서 약속과 비 약속 약속하기

Promise.all([aPromise(), Promise.method(notAPromise)()]) 
.spread(function(result1, result2) { 
    //do something with results 
}) 
.catch(function(error) { 
    //do something with error 
}); 

을 할 수있는 가장 좋은 방법입니다 또는 외부해야 확실 있나요?

이 방법의 장점은 aPromise가 서버에서 돌아가는 데 시간이 걸리는 경우입니다. 아크로니스는 다시 돌아올 때까지 완료 할 수 없습니다. 또는 다른 방법으로는 서버를 호출하기 전에 notapromise가 동기화 될 때까지 기다릴 필요가 없습니다.

이 코드를 작성하는 더 좋은 방법이 있습니까?

EDIT : 또한 결과를 반환하는 대신 notPromise가 일부 상태를 변경하는 경우 aPromise가 성공적으로 반환 한 경우에만 새 상태를 원합니다. aPromise가 던지기는하지만 아크로뱃이 완료되지 않으면 우리는 새로운 상태가 될 것입니다.

+0

Promise는 비동기식으로 실행할 수 있으므로 promise.all 내부에 약속하지 않은 함수를 삽입 할 필요가 없습니다. –

답변

3

코드는 절대적으로 좋으며 (notAPromise이 던져 줄 경우도 처리합니다). 우리가 어떤 순서로 또는 두 개의 함수가 호출 어떤 시간에 상관하지 않습니다 그러나, 일반적으로 하나의 간단한

aPromise().then(function(result1) { 
    var result2 = notAPromise(); 
    //do something with results 
}).… 

를 작성합니다. 동기 notAPromise은 실행 시간이 중요하지 않고 (다른 것과 병렬로 실행될 수 있어야 함) 비동기 였음에 틀림 없다면 실행 시간이 눈에 띄지 않을 것으로 예상됩니다.