2014-03-04 4 views
5

배열을 기반으로 일부 비동기 함수를 순차적으로 실행하려고합니다.약속을 사용하여 함수를 순차적으로 실행

var Promise = require("bluebird"); 
Promise.cast([1,2,3]).reduce(function(_,i){ 
    console.log("Launching " + i); 
    return Promise.delay(Math.floor(Math.random()*1000)).then(function(){ 
     console.log("Executing " + i); 
    }); 
},0); 

하지만 난 전적으로 순차적 실행을 보장 할 수 있습니다 방법 대신

Launching 1 
Executing 1 
Launching 2 
Executing 2 
Launching 3 
Executing 3 

일 것입니다 원하는 결과의

Launching 1 
Launching 2 
Launching 3 
Executing 2 
Executing 1 
Executing 3 

를 얻을 :

은 내가 그것을 할 것이라고 생각 여기?

나는 약속 없이는 그 방법을 알고 있습니다. 나는 완전한 약속의 해결책에만 관심이 있습니다.

답변

2

이전 버전의 Bluebird를 사용하고 있습니다.

.map.filter처럼

, .reduce 이제 반복 기능에서 약속과 thenables를 반환 할 수 있습니다 : .reduce의 동작은이 방식으로 작동 v1 변경되었습니다.

(from the changelog)

최신 버전으로 업데이트하시기 바랍니다. 이로 인해 코드가 올바르게 실행됩니다.

+1

예, Bluebird를 1.0.8로 업그레이드하면 문제가 해결되었습니다. –

+1

누구나이 글을 읽고 Bluebird의'

관련 문제