такую логику (использую redux).
Идея такая: вызывается событие startRecording, создается рекордер и запускается запись, далее я хочу дождаться вызова события stopRecording, и когда оно вызывается останавливается запись, после чего помещается в хранилище.
Как такое правидльно реализовать?
Я сделал представил снизу концепт.
Я реализовал рабочую версию при помощи прокси и внешнего, по отношению к событиям, объектам, но работает не красиво.
Буду рад совету, спасибо.
export const startRecording = () => async dispatch => {
const recorderInst = await recorder();
dispatch(recording());
recorderInst.start();
await stopRecording();
const record = await recorderInst.stop();
dispatch(wait());
dispatch(addRecord(record));
};
export const stopRecording = () => () => {
monitor.change();
};
Если интересно, я решил это немного по другому и как кажется логичнее. export class EventGenerator { constructor(name) { this.name = name; this.event = new Event(name); this.target = new EventTarget(); } wait() { return new Promise(resolve => this.target.addEventListener(this.name, () => resolve()) ); } generate() { this.target.dispatchEvent(this.event); } } ———————————————————————————————————————————————————————— const eventGenerator = new EventGenerator("stopRecording"); export const startRecording = () => async (dispatch, getState) => { if (getState().app.state === STATE_OF_APP.RECORDING) return; if (getState().app.first) { dispatch(notFirst()); } const recorderInst = await recorder(); dispatch(recording()); recorderInst.start(); await eventGenerator.wait(); const record = await recorderInst.stop(); dispatch(wait()); dispatch(addRecord(record)); }; export const stopRecording = () => () => { eventGenerator.generate(); };
Обсуждают сегодня