gpt4 book ai didi

promise - 展平 Promise map

转载 作者:行者123 更新时间:2023-12-02 15:34:49 31 4
gpt4 key购买 nike

我很好奇你如何将数组 Promise 映射的结果展平。我有一个函数 Promise.maps 一组值,它们本身就是 promise (需要解析)并返回一个数组。所以,我得到类似的结果: [ [1, 2, 3], [1, 2, 3], 等等 ] 我一直在使用 lodash/下划线 ._flatten 之后,但是,我确信有一个更清洁的方法。

return Promise.map(list, function(item) {
return new Promise(function(res, rej) {
return res([1, 2, 3]);
});
});

最佳答案

我们在 bluebird 中没有 flatMap,如果您愿意,可以使用 .reduce 来连接结果:

return Promise.map(list, function(item) {
return Promise.resolve([1, 2, 3]); // shorter than constructor
}).reduce(function(prev, cur){
return prev.concat(cur);
}, []);

尽管 lodash flatten 也可以起到以下作用:

return Promise.map(list, function(item) {
return Promise.resolve([1, 2, 3]); // shorter than constructor
}).then(_.flatten);

也可以教 bluebird 执行此操作(如果您是库作者 - 请参阅如何获取新副本而不会发生冲突):

Promise.prototype.flatMap = function(mapper, options){
return this.then(function(val){
return Promise.map(mapper, options).then(_.flatten);
});
});

Promise.flatMap = function(val, mapper, options){
Promise.resolve(val).flatMap(mapper, options);
});

这会让你这样做:

return Promise.flatMap(list, function(){
return Promise.resolve([1, 2, 3]);
});

关于promise - 展平 Promise map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30809197/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com