У меня есть ситуация.Я использую Node.js для подключения к специальному оборудованию.давайте предположим, что у меня есть две функции для доступа к аппаратному обеспечению.
hardware.send('command');
hardware.on('responce', callback);
Сначала я создал класс для сопряжения этого с прикладным уровнем следующим образом (я пишу здесь упрощенный код для лучшего понимания)
class AccessHardware {
constructor() {
}
updateData(callback) {
hardware.on('responce', callback);
hardware.send('command');
}
}
Теперь проблема заключается в том, что если существует несколько запросов от уровня приложения к этому уровню доступа, они не должны отправлять несколько «команд» на оборудование.Вместо этого они должны отправить одну команду, и все эти обратные вызовы могут быть обработаны после того, как оборудование ответит на команду.
Поэтому я обновляю код примерно так:
class AccessHardware {
constructor() {
this.callbackList = [];
hardware.on('responce', (value) => {
while (this.callbackList.length > 0) {
this.callbackList.pop()(value);
}
});
}
updateData(callback) {
if (this.callbackList.length == 0) {
hardware.send('command');
}
this.callbackList.push(callback);
}
}
Конечно, япредпочитаю использовать обещание справиться с ситуацией.так что вы предлагаете написать этот код с обещанием?Следующий вопрос: хорош ли этот подход для создания «списка обратных вызовов»?