Javascript - Как уменьшить несколько Promise.all?
0 jhamm [2017-04-16 07:16:00]
Я пытаюсь использовать Promise.all внутри reduce и не могу заставить мой function работать, если только в моем массиве нет только одного пользователя. Начальным объектом reduce является Promise. В первый раз через reduce, Promise имеет .all, доступный на нем. Второй раз, .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);
})
Как я могу выполнить эту операцию?
javascript promise reduce
2 ответа
1 Решение guest271314 [2017-04-16 07:46:00]
Вы инициализируетесь с помощью Promise, который является функцией, хотя возвратите разрешенный объект Promise, где два не совпадают.
Вы можете инициализировать с помощью Promise.resolve(), вызвать promise.then(), а затем вернуть Promise.all() с помощью .then(), прикованный в течение первого .then(), который передает объект Promise на следующую итерацию в .reduce().
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());
})
1 Tatsuyuki Ishi [2017-04-16 07:48:00]
Нет необходимости использовать 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)
]);
}));
});