2017-04-16 2 views
0

내 배열에 한 명의 사용자 만 있지 않는 한 reduce 안에 Promise.all을 사용하려하고 내 function을 사용할 수 없습니다. reduce의 시작 객체는 Promise입니다. 처음으로 reduce을 통해 Promise.all을 사용할 수 있습니다. 두 번째로 .all을 사용할 수 없습니다.javascript - 여러 Promise.all을 줄이려면 어떻게합니까?

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return users.reduce((promise, user) => { 
    return promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ]) 
    .then(() => Promise.resolve(user)) 
    }, Promise); 
}) 

이 작업을 어떻게 수행 할 수 있습니까?

+0

어쨌든'promise'와'Promise' 사이에는 명백한 오타가 있습니다. –

+0

소문자 인'promise'는 초기 객체 인'Promise'를 참조하는'reduce'의 첫번째 인자 일뿐입니다. 오타가 아닙니다. – jhamm

+0

'Promise.prototype.all()'이 없습니다. 오직'Promise.all()'. –

답변

1

해결 된 Promise 개체 (두 개는 동일하지 않음)를 반환하지만 함수 인 Promise으로 초기화합니다.

당신은 다음 .reduce()에서 다음 반복에 Promise 객체를 전달 첫째 .then(), 내 체인 .then()Promise.all()을 반환 promise.then() 전화 Promise.resolve()으로 초기화 할 수 있습니다.

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return users.reduce((promise, user) => { 
    return promise.then(() => Promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ])) 
    .then(() => user)) 
    }, Promise.resolve()); 
}) 
+0

나는 이것을 시도했지만 그 결과로 마지막 사용자 만 얻는다. 삽입 된 나머지 사용자는 얻지 못합니다. – jhamm

+0

"내가 삽입 한 나머지 사용자는 얻지 못한다"는 의미는 무엇입니까? 예상 결과가 결과 배열 인 경우에는 .reduce()를 사용할 필요가 없습니다. '.reduce()'를 사용하는 목적은 무엇입니까? – guest271314

1

reduce()을 사용할 필요가 없습니다. 그냥 사물을 매핑하고 모두 기다려.

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return Promise.all(users.map((user) => { 
    return Promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ]); 
    })); 
}); 
관련 문제