Попытка получить обратный вызов JavaScript для работы без блокировки - PullRequest
0 голосов
/ 28 сентября 2019

пытается лучше понять обратные вызовы ....

У меня есть этот код:

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);

Теперь он выводит как блокирующим образом:

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

Как я могу заставить это работать как:

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

Спасибо

1 Ответ

0 голосов
/ 29 сентября 2019

Спасибо за ответы, так вот как я это сделал, используя 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);

и после запуска это вывод - очевидно, рандомизированные ответы при каждом запуске, так как использовался Math.random ().

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...