我有像这样的对象;
{ '6': { stream: { twitch: [Object] } },
'7': { stream: { twitch: [Object] } },
'8': { stream: { twitch: [Object] } },
'9': { stream: { twitch: [Object] } },
'10': { stream: { twitch: [Object] } },
'11': { stream: { twitch: [Object] } } }
我想像迭代一样迭代它;
return Promise.map(myObj, function(minute, minuteIndex) {
所以基本上应该保持数据分钟,而minuteIndex应该保持索引。
我可以用lodash做到,但蓝鸟不知何故。
_.forEach(hour.minutes, function(minute, minuteIndex) {
我知道此代码之前正在运行,但现在无法实现。
有什么想法吗?
答案 0 :(得分:4)
您可以将对象的键映射到数组中并将其提供给 $scope.dtColumns = dtColumns;
//create options
$scope.dtOptions = DTOptionsBuilder.newOptions()
.withOption('data', data)
.withOption('dataSrc', '');
//initialize the dataTable
angular.element('#dtData').attr('datatable', '');
$compile(angular.element('#dtData'))($scope);
:
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
});
}
答案 1 :(得分:1)
export class ContainerComponent implements OnInit, AfterViewInit {
@Input() formData: Object;
@ViewChild('form') form: NgForm;
constructor() { }
ngOnInit(): void {
}
ngAfterViewInit(): void {
this.form.form.valueChanges.subscribe((value) => {
//Gets called multiple times on page load
});
}
}
结合使用Promise.All(
Object.keys(twitchStats).map(key => Promise.resolve({
minute: key, minuteIndex: twitchStats[key]
})
)
和Promise.All()
函数。请注意,Map()必须兑现承诺,以便Map()
正常工作。
答案 2 :(得分:0)
您也可以使用_.toPairs将对象转换为数组,然后您就可以使用Promise.map方法。
答案 3 :(得分:0)
您没有在问题中指定是否使用Promise.map()
回调函数返回诺言或值。如果只想返回一个值,则使用Promise.map()
而不是forEach
并没有太大的好处。
Bluebird的Promise.map()
用于最基本的界面是根据文档:
替换.push + Promise.all样板
假设您要返回承诺,则可以使用lodash.map()
遍历对象,并在创建 承诺时使密钥可用,然后使用Promise.all()
执行它们
let jobs =
_.map(myObj, (minute, minuteIndex) => {
return fnThatReturnsPromise(minute, minuteIndex);
});
return Promise.all(jobs);
或者作为一个更类似于您所需格式的语句
return Promise.all(_.map(myObj, (minute, minuteIndex) => {
return fnThatReturnsPromise(minute, minuteIndex);
}));