如何使用蓝鸟地图和return对象
How to use bluebird map and return object
我需要使用 map bluebird(Promise 库)但是 return 一个对象,而不是一个数组。
目前我是这样用的(但是错了):
return new Promise(function(resolve, reject) {
return Promise.map(files, function(file) {
// LOGIC
resolve({
// object here
})
}, { concurrency: 3000 })
});
原因很简单:我需要并发:3000,我需要return这个对象。所以新的Promise是return对象,而不是数组,map是因为并发。
bluebird有没有其他方法可以帮助我实现我所需要的?我找了很多都没有找到。
我认为 Bluebird 中没有直接用于此的方法。但是你总是可以 return 一个数组,你可以稍后将它转换为对象。因此你不需要 Bluebird 来做它。例如使用 Lodash 你可以使用 zipObject:
_.zipObject([['fred', 30], ['barney', 40]]);
// → { 'fred': 30, 'barney': 40 }
如果您尝试生成以下形式的对象:
var result = {
file1: result1,
file2: result2
};
其中 file1
和 file2
是文件名,result1
和 result2
是对 file1
和 file2
,那么你可以这样做:
var result = {};
return Promise.map(files, function(file) {
return doSomeAsync(file).then(function(data) {
// add to our result object
result[file] = data;
});
}, {concurrency: 3000}).then(function() {
// make the result obj be the final resolved value of Promise.map()
return result;
});
这将使上面的 result
对象成为 Promise.map()
promise 的最终解析值,该 promise return 从其中的函数编辑。
如果上面的第一个代码块不是您要生成的 "object" 类型,那么请进一步说明您想要的输出类型。
此外,您可能希望避免 promise anti-pattern 创建不必要的承诺,而不仅仅是链接或 return 您已经拥有的承诺。
我需要使用 map bluebird(Promise 库)但是 return 一个对象,而不是一个数组。
目前我是这样用的(但是错了):
return new Promise(function(resolve, reject) {
return Promise.map(files, function(file) {
// LOGIC
resolve({
// object here
})
}, { concurrency: 3000 })
});
原因很简单:我需要并发:3000,我需要return这个对象。所以新的Promise是return对象,而不是数组,map是因为并发。
bluebird有没有其他方法可以帮助我实现我所需要的?我找了很多都没有找到。
我认为 Bluebird 中没有直接用于此的方法。但是你总是可以 return 一个数组,你可以稍后将它转换为对象。因此你不需要 Bluebird 来做它。例如使用 Lodash 你可以使用 zipObject:
_.zipObject([['fred', 30], ['barney', 40]]);
// → { 'fred': 30, 'barney': 40 }
如果您尝试生成以下形式的对象:
var result = {
file1: result1,
file2: result2
};
其中 file1
和 file2
是文件名,result1
和 result2
是对 file1
和 file2
,那么你可以这样做:
var result = {};
return Promise.map(files, function(file) {
return doSomeAsync(file).then(function(data) {
// add to our result object
result[file] = data;
});
}, {concurrency: 3000}).then(function() {
// make the result obj be the final resolved value of Promise.map()
return result;
});
这将使上面的 result
对象成为 Promise.map()
promise 的最终解析值,该 promise return 从其中的函数编辑。
如果上面的第一个代码块不是您要生成的 "object" 类型,那么请进一步说明您想要的输出类型。
此外,您可能希望避免 promise anti-pattern 创建不必要的承诺,而不仅仅是链接或 return 您已经拥有的承诺。