Синхронные обратные вызовы в javascript [дубликат]

Хорошо, просто так, я новичок в JS и Espruino и поэтому застрял во время проекта; Я пытаюсь получить максимум массива для console.logged сразу после выполнения основной функции:

      const cw = 1;
const ccw = 0;
const dataCW = [];
const peekCW = [];
const dataCCW = [];
const peekCCW = [];
const dataLength = 36;


const getData = (dir, t, fn) => {
    const solarIn = () => analogRead(A5);
    const dataRead = () => ((solarIn() * 65536) * 5.0) / 65536;
    const dataPush = (data) => {
        data.push(dataRead());
    };

    const peekVal = (fnc) => {
        if(dir === 1) {
            for(let i = 0; i < dataLength; i++) {
                setTimeout(() => {
                    dataPush(dataCW);
                    if(dataCW.length === dataLength) {
                        let peekValCW = Math.max.apply(null, dataCW);
                        let peekValPosCW = dataCW.indexOf(peekValCW);
                        peekCW.push(peekValPosCW);
                    }
                }, i * (t / dataLength));
            }
        }
        else if(dir === 0) {
            for(let i = 0; i < dataLength; i++) {
                const forCCW = setTimeout(() => {
                    dataPush(dataCCW);
                    if(dataCCW.length === dataLength) {
                        let peekValCCW = Math.max.apply(null, dataCCW);
                        let peekValPosCCW = dataCCW.indexOf(peekValCCW);
                        peekCCW.push(peekValPosCCW);
                    }
                }, i * (t / dataLength));
            }
        }
        fnc();
    };
    fn(peekVal, peekCW);
};


getData(cw, 1000, (n, m) => n((m) => console.log(m)));

Я чувствую, что потратил слишком много времени, пытаясь самостоятельно, и разочаровался только в возвратах, таких как undefined или же = [ ]потому что я не могу передать его должным образом после завершения выполнения функции. Честно говоря, меня интересуют только решения, связанные с обратными вызовами, я знаю, что в Espruino теперь реализованы обещания, и почти чувствую, что это нужно делать с помощью обратных вызовов, поскольку я считаю, что это такая важная тема, которую нужно знать / освоить. Спасибо за помощь.

С уважением, Джордж М.

0 ответов

Другие вопросы по тегам