Callback functions
by lovinglobo
JavaScript
let i = 0;
console.log("Fuck you");
function getCdRomSector(driveNr, sectorNr, callbackFn) {
// do something semi-intelligble here
//...
//...
const cdRom =
[
["0101010101", "1101010110", "11111111111"], // drive 0
["2222211451", "1101124121240", "11523235111"] // drive 1
];
const sectorData = cdRom[driveNr][sectorNr];
callbackFn(sectorData);
}
///
function writeFile(sectorA, sectorB) {
console.log(`sectorA ${sectorA} sectorB ${sectorB}`);
}
// asynchronous sequential code
function getCdRomSectorsSequential(driveNrSectorNrs, resultCallbackFn) {
//...
console.log("implement me please!")
}
getCdRomSector(0, 0,(sectorZeroDriveZero) => {
getCdRomSector(1, 1,(sectorOneDriveOne) => {
writeFile(sectorZeroDriveZero, sectorOneDriveOne);
});
});
// this should have the same result as the previous 5 lines
getCdRomSectorsSequential([[0, 0], [1, 1]], cdromSectors => {
writeFile(cdromSectors[0], cdromSectors[1]);
})
// asynchronous parallel code
function hasUndefinedElements(arr) {
// HOMEWORK, why is this the same as:
// return arr.reduce((acc, e) => acc || e === undefined, false);
let result = false;
for (let j = 0; j < arr.length; j++) {
if (arr[j] === undefined) result = true;
}
return result;
}
function getFnResultsInParallel(fn, arguments, resultCallbackFn) {
let results = new Array(arguments.length); // [undefined, undefined]
for (let i = 0; i < arguments.length; i++ ) {
fn(arguments[i][0], arguments[i][1], result => {
results[i] = result; // filling the empty slots
// if all empty slots filled, call the callbackFn
if (!hasUndefinedElements(results)) {
resultCallbackFn(results);
}
});
}
}
getFnResultsInParallel(getCdRomSector, [[0, 0], [1, 1]], (cdRomSectors) => {
writeFile(cdRomSectors[0], cdRomSectors[1]);
});
let otherResult;
getCdRomSector(0, 0,(sectorZeroDriveZero) => {
/* ... */
if (otherResult !== undefined) {
writeFile(sectorZeroDriveZero,...