Синхронные обратные вызовы в 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 теперь реализованы обещания, и почти чувствую, что это нужно делать с помощью обратных вызовов, поскольку я считаю, что это такая важная тема, которую нужно знать / освоить. Спасибо за помощь.
С уважением, Джордж М.