我有一个javascript承诺,我希望将值返回到map函数,更容易看到,而不是用第二个promise来解释问题。我知道我无法从承诺内部返回价值,但我问是否有更好的解决方案。感谢
我的代码:
user.contacts = _map(user.contacts, (contact) => {
this.findById.then((user) => {
contact.user = user
})
return contact
})
问题在这里:
Animal *heapAllocatedAnimal = malloc(sizeof(Animal));
memcpy(heapAllocatedAnimal,&a,sizeof(Animal));
答案 0 :(得分:0)
由于您使用的是When promise库,因此您应该使用自己的迭代器(例如map
和reduce
)来处理数组。
有一点非常重要,值得注意的是,当map
运行"机会主义" (并行运行所有内容),reduce
串行运行,没有重叠。换句话说,如果您有一个包含1000个用户的数组,map
将(可能)一次向您的数据库发送1000个请求,而reduce
将完成,直到它完成每个数据库请求反过来。
所以你的代码可能如下所示:
// This mutates user.contacts, so you don't need to worry about the
// 'initial value' in your reducer function
When.reduce(user.contacts, (carry, contact) => {
return this.findById.then((user) => {
contact.user = user
})
});
如果您确实需要处理大量用户,那么将数据块化为一个较小的,合理大小的数组可能更有意义;你会reduce
块和map
每个块中的用户。这意味着可以比串行完成更快地处理数组,但没有任何冲洗数据库的风险。
修改强>
// This mutates user.contacts, so you don't need to worry about the
// 'initial value' in your reducer function
// It also returns the array of users as `allContacts`
var allContacts = When.reduce(user.contacts, (carry, contact) => {
return this.findById.then((user) => {
contact.user = user
carry.push(user);
return carry;
})
}, []);