2017-09-26 2 views
0

동시에 반복 할 필요가있는 같은 길이의 반복 가능한 반복문을 두 개 있습니다. 하나의 반복 가능한 객체는 맞춤 객체의지도이고 다른 하나는 객체의 배열입니다. 배열의 내용을 Map (일부 도우미 프로토 타입 함수를 통해)에 추가해야합니다. 비동기 적으로 동시에 병행하는 것이 좋습니다. 또한 두 컨테이너는 순서에 따라 서로 연관됩니다. 따라서 배열의 첫 번째 요소는 Map의 첫 번째 요소에 추가해야합니다. 배열 비동기를 통해 루프 일반적으로같은 길이의 반복 가능한 반복문 두 개를 동시에 반복합니다.

var map; 
var arr; 
for (var i = 0; i < arr.length; i++) { 
    // get our custom object, call its prototype helper function with the values 
    // in the array. 
    let customObj = map[i]; 
    customObj.setValues(arr[i]) 
} 

을 동시에 나는 파랑새 Promise.map를 사용 : 나는이 작업을 수행했다면

동기는 다음과 같이 보일 것입니다. 그것은 다음과 같이 보일 것입니다 :

var arr 
Promise.map(arr, (elem) => { 
    // do whatever I need to do with that element of the array 
    callAFunction(elem) 
}) 

나는 이런 식으로 뭔가 할 수 있다면 좋지 않을까 :

var map; 
var arr; 
Promise.map(map, arr, (mapElem, arrElem) { 
    let customObj = mapElem[1]; 
    customObj.setValue(arrElem); 
}) 

사람이 도서관이나 내가이 작업을 수행 할 수 있도록하는 영리한 방법을 알고 있나요를?

감사합니다.

편집 :지도에 저장된 개체에 대한 설명을 추가하기 만하면됩니다. 지도는 고유 한 값으로 키가 지정되고 값은이 고유 한 값과 연결되어이 개체를 구성합니다. 그것은이 유사한 방식으로 정의된다

module.exports = CustomObject; 
function CustomObject(options) { 
    // Initialize CustomObjects variables... 
} 

CustomObject.prototype.setValue(obj) { 
    // Logic for adding values to object... 
} 

답변

1

,지도 (난 당신이 정말 주문 여기에 자바 스크립트지도를 의미 가정)와 배열이 같은 길이를 가지고, 당신은 모두를 소요, ​​매핑 기능이 필요하지 않습니다 배열 및지도. 지도 함수가 색인 값을 제공하기 때문에 둘 다 충분합니다.

+0

이것은 완벽합니다! Promise.map 문서에서 간과했습니다. 엄청 고마워! –

0

당신은 주어진 모든 비동기 기능을 수행하는 기능 Promise.all을 사용할 수 있습니다.

사실 node.js가 완전히 Promises을 지원한다는 것을 알고 있어야합니다. 더 이상 bluebirds이 필요하지 않습니다. 당신이 이미 알고있는 경우

Promise.all(arr.map(x => anyAsynchronousFunc(x))) 
    .then((rets) => { 
     // Have here all return of the asynchronous functions you did called 

     // You can construct your array using the result in rets 
    }) 
    .catch((err) => { 
     // Handle the error 
    }); 
+0

속도에 블루 버드를 사용합니다! 나는 두 객체를 동시에 반복해야한다. 커스텀 오브젝트를 정의했고 맵은 그러한 커스텀 오브젝트로 구성되어 있습니다. 호출해야하는 헬퍼 함수는 해당 객체 인스턴스의 멤버 함수이므로 호출 할 때마다 객체의 특정 인스턴스를 편집합니다. 더 많은 설명이 필요하면 알려주세요. –