Promise.map over 对象

Hus*_*slu 4 node.js bluebird

我有一个对象;

{ '6': { stream: { twitch: [Object] } },
  '7': { stream: { twitch: [Object] } },
  '8': { stream: { twitch: [Object] } },
  '9': { stream: { twitch: [Object] } },
  '10': { stream: { twitch: [Object] } },
  '11': { stream: { twitch: [Object] } } }
Run Code Online (Sandbox Code Playgroud)

我想迭代它;

return Promise.map(myObj, function(minute, minuteIndex) {
Run Code Online (Sandbox Code Playgroud)

所以基本上 minute 应该保存数据,而 minuteIndex 应该保存索引。

我可以用 lodash 做到这一点,但 bluebird 不能以某种方式。

_.forEach(hour.minutes, function(minute, minuteIndex) {
Run Code Online (Sandbox Code Playgroud)

我知道此代码以前可以使用,但现在无法使用。

有任何想法吗?

Tom*_*lak 5

您可以将对象的键映射到数组中并将其提供给Promise.map()

function process(stats) {
    var statsArray = Object.keys(stats).map(key => ({
        minute: key, minuteIndex: stats[key]
    }));
    return Promise.map(statsArray, item => {
        // work with item.minute & item.minuteIndex
    });
}
Run Code Online (Sandbox Code Playgroud)

用法:

var twitchStats = {
  '6': { stream: { twitch: [Object] } },
  '7': { stream: { twitch: [Object] } },
  '8': { stream: { twitch: [Object] } },
  '9': { stream: { twitch: [Object] } },
  '10': { stream: { twitch: [Object] } },
  '11': { stream: { twitch: [Object] } }
};

process(twitchStats).then(result => {
    // ...
});
Run Code Online (Sandbox Code Playgroud)