비동기 메서드를 노출하는 구조와 같은 배열이 있습니다. 비동기 메서드는 더 많은 비동기 메서드를 노출하는 반환 배열 구조를 호출합니다. 이 구조에서 얻은 값을 저장하기 위해 다른 JSON 개체를 만들고 있으므로 콜백에서 참조를 추적하는 데주의해야합니다.
무차별 대입 솔루션을 코딩했지만 좀 더 관용적이거나 깨끗한 솔루션을 배우고 싶습니다.
- 패턴은 n 레벨의 중첩에 대해 반복 가능해야합니다.
- Promise.all 또는 유사한 기술을 사용하여 둘러싸는 루틴을 해결할시기를 결정해야합니다.
- 모든 요소가 반드시 비동기 호출을 포함하는 것은 아닙니다. 따라서 중첩 된 promise.all에서는 인덱스를 기반으로 JSON 배열 요소에 할당 할 수 없습니다. 그럼에도 불구하고 내포 루틴을 해결하기 전에 모든 속성 할당이 이루어 졌는지 확인하기 위해 중첩 된 forEach에서 promise.all과 같은 것을 사용해야합니다.
- bluebird promise lib를 사용하고 있지만 필수 사항은 아닙니다.
다음은 일부 코드입니다.
var jsonItems = [];
items.forEach(function(item){
var jsonItem = {};
jsonItem.name = item.name;
item.getThings().then(function(things){
// or Promise.all(allItemGetThingCalls, function(things){
things.forEach(function(thing, index){
jsonItems[index].thingName = thing.name;
if(thing.type === 'file'){
thing.getFile().then(function(file){ //or promise.all?
jsonItems[index].filesize = file.getSize();
이것은 제가 개선하고 싶은 작업 소스에 대한 링크입니다. github.com/pebanfield/change-view-service/blob/master/src/…
—
user3205931
난 당신이 블루 버드를 사용하고있는 샘플을 참조 블루 버드 실제로 당신의 인생을 만들어 더 쉽게 와
—
Benjamin Gruenbaum 2015
Promise.map
(동시) 및 Promise.each
이 경우 (연속)도 참고가 Promise.defer
되지 않습니다를 - 내 대답 프로그램의 코드가 어떻게하여 피하기 위해 반환 약속을. 약속은 반환 값에 관한 것입니다.