2015-01-09 57 views
0

我有一大堆這些函數,我想知道我怎麼能把它們全部看作是一個對象。它們都可以並行運行。有沒有東西烤到bluebird來促進這一點?渲染承諾的整個對象的承諾值

report.osx_serial = function(){ 
    return execAsync("ioreg -l | grep IOPlatformSerialNumber").spread(rmNewLines).then(rmSerial).catch(returnFalse); 
} 

report.osx_serial().then(console.log); 

回答

1

也可以做類似到Promise.map新功能上的對象的工作原理:如果你有Lo-Dash得心應手

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); 

,這是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)); 
} 
+0

我不認爲'。所有()'需要承諾的數組https://github.com/petkaantonov/bluebird/blob/master/API.md#all-- -promise:/ – ThomasReggi 2015-01-09 20:33:15

+0

@ThomasReggi:這個第一句話是*「給定一個包含承諾的數組」*。 – Ryan 2015-01-09 20:35:03

+0

嗯控制檯日誌內,然後是我的所有功能,不承諾價值觀。 – ThomasReggi 2015-01-09 20:36:10