Вызов метода с обратным вызовом в массиве классов ES6

1

У меня есть массив простых классов ES6. Каждый класс имеет конструктор и приветственный метод, который принимает обратный вызов. Мне нужно повторить этот массив и вызвать метод hello для каждого класса. Каждый обратный вызов должен завершиться, прежде чем я хочу выпустить общее событие. Я просто не уверен, как это сделать.

let todo = this.instance.map((obj, i) => {
    return obj.module.hello((cb) => {
        cb();
    });
}); 

Promise.all([
  todo
]).then(() => {
    console.log('done?');
    //emitter.emit('ready');
});

Мои классы выглядят так.

class Hero extends Abstract {

  constructor (options) {
    super(options);
  }

  hello(cb) {
      console.log('Hello || HeroClass');
      setTimeout(() => {
          cb();
      }, 2000);
  }
}
Теги:
ecmascript-6
arrays
reduce
mapreduce

2 ответа

1
Лучший ответ

Создайте массив таких обещаний:

let todo = this.instance.map((obj, i) => {
    return new Promise((resolve, reject) => {
       obj.module.hello(err => err ? reject(err) : resolve());
    });
}); 

Promise.all(todo).then(() => {
    console.log('done?');
    //emitter.emit('ready');
});
  • 0
    Это сработало отлично! Спасибо!
1

Вы должны возвращать обещания из функции сопоставления, тогда вы можете ждать их с помощью Promise.all:

let todo = this.instance.map((obj, i) => {
    return new Promise(resolve => 
        obj.module.hello(resolve)
    )
});

Promise.all(todo).then(() => {
    console.log('done?');
});
  • 0
    let todo = this.instance.map ((obj, i) => {вернуть новое обещание ((resol) => {obj.module.hello (resol);})});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню