Q.JS playground

by colintoh

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.2.0/q.js"></script>

JavaScript

var makeBeef = function(animal,cb){
    setTimeout(function(){
        if(animal === "cow"){
            cb("beef");
        } else {
            throw("Not a cow");
        }
    },0);
}

try {
makeBeef("co",function(meat){
    console.log(meat);
});
} catch(e){
    console.log("haha",e);
}

var cutLettuce = function(cb){
    setTimeout(function(){
        cb("Chopped Lettuce");
    },0);
}

var grillBeef = function(cb){
    setTimeout(function(){
        cb("Grilled Beef");
    },0);
}

var toastBun = function(cb){
    setTimeout(function(){
        cb("Toasted Bun");
    },0);
}

var makeBurger = function(lettuce,beef,bun){
        if(lettuce === "Chopped Lettuce" && beef === "Grilled Beef" && bun === "Toasted Bun"){
            return "Big Mac";
        } else {
            return "No Burger";
        }
}

cutLettuce(function(lettuce){
    grillBeef(function(beef){
        toastBun(function(bun){
            console.log(makeBurger(lettuce,beef,bun));
        });
    });
});

var cutLettucePromise = function(){
    return Q.Promise(function(resolve,reject){
        setTimeout(function(){
            resolve("Chopped Lettuce");
        },0);
    });
}

var grillBeefPromise = function(){
    return Q.Promise(function(resolve,reject){
        setTimeout(function(){
            resolve("Grilled Beef");
        },0);
    });
} 

var toastBunPromise = function(){
    return Q.Promise(function(resolve,reject){
        setTimeout(function(){
            resolve("Toasted Bun");
        },0);
    });
} 

Q.all([cutLettucePromise(),grillBeefPromise(),toastBunPromise()]).spread(makeBurger).then(function(msg){
    console.log(msg);
});

console.log('shout');