我有很多这些函数,我想知道如何将它们全部归结为一个对象。它们都可以并行运行。是否有bluebird
这样的内容可以促进这一点?
report.osx_serial = function(){
return execAsync("ioreg -l | grep IOPlatformSerialNumber").spread(rmNewLines).then(rmSerial).catch(returnFalse);
}
report.osx_serial().then(console.log);
答案 0 :(得分:1)
您可以创建一个类似于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));
}