루프의 마지막 약속이 수행 된 후에이 약속을 어떻게 해결할 수 있습니까? bluebird와루프 완료 후 NodeJS 약속 완료
var foo = function(jsonArray){
return Promise.each(jsonArray, doIntensiveWork).each(doMoreIntensiveWork);
});
루프의 마지막 약속이 수행 된 후에이 약속을 어떻게 해결할 수 있습니까? bluebird와루프 완료 후 NodeJS 약속 완료
var foo = function(jsonArray){
return Promise.each(jsonArray, doIntensiveWork).each(doMoreIntensiveWork);
});
를 사용합니다.
var foo = function(array) {
return new Promise.map(array, function(element) {
return doIntensiveWork(element).then(doMoreIntensiveWork);
});
};
foo(['bar', 'baz'])
.then(function(returnedValues) {
// returnedValues is an array containing all values
// return by your intensive work in foo
});
첫 번째'doMoreIntensiveWork'로 시작하기 전에 모든 doIntensiveWorks를 기다릴 것입니까? – Bergi
@Bergi는 공정하다는 것을 기억하지 못합니다. 여기에는 (.map과 같이) 최적화가 가능하거나 Petka가 아직 구현하지 않기로 결정했을 가능성이 있습니다. 어쨌든 원래의 코드를 기반으로 모든 작업이 순차적으로 진행될 때까지 기다리기를 원하기 때문에 나에게 큰 의미를 부여하지는 않는다. –
:
var foo = function(JSONArray){
return new Promise(function(resolve,reject){
for(var i=0; i < JSONArray.length; i++){
doIntensiveWork(JSONArray[i])
.then(doMoreIntensiveWork) //returns a promise
}
//resolve() after every promise from the loop is fulfilled
})
}
나는 당신이 Promise#each
을 사용할 수 있습니다 Bluebird
'Promise.map'은 동시에 실행되고 반복 순서를 유지하지 않으며 일반적으로 OP의 원래 코드 (잘못된 반환 값 빼기)를 수행하지 않습니다. –
@BenjaminGruenbaum : 나는 작업이 동시에 이루어져서는 안된다는 어떠한 표시도 보이지 않는다. 'Promise.map'은 여기로가는 길일 것 같습니다. – Bergi
'지도'가 순서를 유지하지 않았다는 것을 알지 못했습니다. 병행성에 관해서는'... map (..., concurrency : 1});'으로 설정할 수 있습니다. 반환 주문이 중요하면 그는 '모두'를 사용할 수 있습니다. –
'->'https://github.com/petkaantonov/bluebird/blob/master/API.md#all---promise –
이 나는 블루 버드 문서는이에 대한 설명의 충분를 줄 생각 . 라이브러리에있는 멋진 콜렉션 메소드를 모두 확인해보십시오. 꽤 강력하다고 생각합니다. – thataustin