我正在尝试使用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);
})
我该如何执行此操作?
答案 0 :(得分:1)
使用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());
})
的下一次迭代。
//if key not exists insert key
if(!map.containsKey(key)){
List<Integer> list = new ArrayList<Integer>();
list.add(value);
map.put(key,list);
}
//if key exists do this...
else{
List<Integer> list = new ArrayList<Integer>();
//Getting previous existing elements on map at that index and adding to list back
list.addAll(map.get(key));
map.put(list);
}
答案 1 :(得分: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)
]);
}));
});