0

trying to better understand callbacks....

I have this code:

function receiveOrder(orderNo, callback) {
    console.log("Received order " + orderNo)
    callback(orderNo, orderReady);
}

function prepareFood(orderNo, callback) {
    console.log("Preparing order " + orderNo)
    for (i = 1; i < 500000000; i++) {} // just to wait a bit, not to use setTimeout
    callback(orderNo);
}

function orderReady(orderNo) {
    console.log("Order " + orderNo + " is ready");
}

receiveOrder(1, prepareFood);
receiveOrder(2, prepareFood);

Now it outputs like in a blocking way:

Received order 1
Preparing order 1
Order 1 is ready
Received order 2
Preparing order 2
Order 2 is ready

How can I get it work like:

Received order 1
Preparing order 1
Received order 2
Preparing order 2
Order 1 is ready
Order 2 is ready

Thanks

Miha
  • 13,223
  • 2
  • 15
  • 16

1 Answers1

0

Thanks for the answers, so this is how I got this done using setTimeout.

function receiveOrder(orderNo, callback) {
    console.log("Received order " + orderNo)
    callback(orderNo, orderReady);
}

function prepareFood(orderNo, callback) {
    console.log("Preparing order " + orderNo)
    setTimeout(() => {
        console.log(callback(orderNo));
    }, Math.floor(Math.random() * 10000))
}

function orderReady(orderNo) {
    return ("Order " + orderNo + " is ready");
}

receiveOrder(1, prepareFood);
receiveOrder(2, prepareFood);
receiveOrder(3, prepareFood);
receiveOrder(4, prepareFood);

and after running this is the output - obviously randomised answers in each run as Math.random() was used.

Received order 1
Preparing order 1
Received order 2
Preparing order 2
Received order 3
Preparing order 3
Received order 4
Preparing order 4
Order 3 is ready
Order 4 is ready
Order 1 is ready
Order 2 is ready
Miha
  • 13,223
  • 2
  • 15
  • 16