JSFiddle - React, Tailwind, and code Playground
by mschock
JavaScript
function Drone() {};
Drone.prototype.takeoff = function takeoff(callback) {
setTimeout(function() {
callback()
console.log('Took off');
}, 600);
};
Drone.prototype.turnOnCamera = function turnOnCamera(callback) {
setTimeout(function() {
callback()
console.log('Camera turned on');
}, 1000);
};
Drone.prototype.pointDownGimbal = function pointDownGimbal(callback) {
setTimeout(function() {
callback()
console.log('Gimbal pointing down');
}, 750);
};
Drone.prototype.flyToMission = function FlyToMission(callback) {
setTimeout(function() {
callback()
console.log('Flown to mission');
}, 2000);
};
Drone.prototype.takePhoto = function takePhoto(callback) {
setTimeout(function() {
callback()
console.log('Photo taken');
}, 500);
};
Drone.prototype.land = function land(callback) {
setTimeout(function() {
callback()
console.log('Landed');
}, 3000);
};
//DONT MODIFY ANYTHING ABOVE HERE
// START ADD YOUR CODE HERE
var drone = new Drone();
Drone.prototype.queue = [];
Drone.prototype.dequeueAndExecuteAction = function() {
if (this.queue.length) {
var action = this.queue.shift();
action();
}
}
function buildEnqueueActionMethod(action, init) {
return function() {
this.queue.push(
Drone.prototype[action].bind(
this, this.dequeueAndExecuteAction.bind(this)
)
);
if (init) {
this.dequeueAndExecuteAction();
}
return this;
}
}
drone.takeoff = buildEnqueueActionMethod('takeoff', true);
drone.turnOnCamera = buildEnqueueActionMethod('turnOnCamera');
drone.pointDownGimbal = buildEnqueueActionMethod('pointDownGimbal');
drone.flyToMission = buildEnqueueActionMethod('flyToMission');
drone.takePhoto = buildEnqueueActionMethod('takePhoto');
drone.land = buildEnqueueActionMethod('land');
// END ADD YOUR CODE HERE
//DONT MODIFY ANYTHING BELOW HERE
console.log("Expected Output:")
console.log("Took Off");
console.log("Camera turned On");
console.log("Gimbal pointing...