У меня есть массив простых классов 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);
}
}
Создайте массив таких обещаний:
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');
});
Вы должны возвращать обещания из функции сопоставления, тогда вы можете ждать их с помощью Promise.all
:
let todo = this.instance.map((obj, i) => {
return new Promise(resolve =>
obj.module.hello(resolve)
)
});
Promise.all(todo).then(() => {
console.log('done?');
});