为整个承诺对象渲染承诺值
Render out promise values for entire object of promises
我有一大堆这样的函数,我想知道如何将它们全部计算到一个对象中。他们都可以 运行 并行。 bluebird
中有什么东西可以促进这一点吗?
report.osx_serial = function(){
return execAsync("ioreg -l | grep IOPlatformSerialNumber").spread(rmNewLines).then(rmSerial).catch(returnFalse);
}
report.osx_serial().then(console.log);
您可以创建一个类似于 Promise.map
的新函数,适用于对象:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises).then(function (results) {
var resultObj = {};
results.forEach(function (result, i) {
resultObj[keys[i]] = result;
});
return resultObj;
});
}
和
promseMapObject({
serial: report.osx_serial(),
…
}).done(console.log);
如果手头有 Lo-Dash,那就是 zipObject
:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises).then(function (results) {
return _.zipObject(keys, results);
});
}
甚至:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises)
.then(_.partial(_.zipObject, keys));
}
我有一大堆这样的函数,我想知道如何将它们全部计算到一个对象中。他们都可以 运行 并行。 bluebird
中有什么东西可以促进这一点吗?
report.osx_serial = function(){
return execAsync("ioreg -l | grep IOPlatformSerialNumber").spread(rmNewLines).then(rmSerial).catch(returnFalse);
}
report.osx_serial().then(console.log);
您可以创建一个类似于 Promise.map
的新函数,适用于对象:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises).then(function (results) {
var resultObj = {};
results.forEach(function (result, i) {
resultObj[keys[i]] = result;
});
return resultObj;
});
}
和
promseMapObject({
serial: report.osx_serial(),
…
}).done(console.log);
如果手头有 Lo-Dash,那就是 zipObject
:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises).then(function (results) {
return _.zipObject(keys, results);
});
}
甚至:
function promiseMapObject(obj) {
var keys = Object.keys(obj);
var promises = keys.map(function (key) {
return obj[key];
});
return Promise.all(promises)
.then(_.partial(_.zipObject, keys));
}