loopback 3 setTimeout странное поведение - PullRequest
0 голосов
/ 05 ноября 2018

Меня смущает такое странное поведение из loopback. В качестве примера ниже я создал очень простой удаленный метод.

Device.getTypes = function(next) {
    let result = {0: {val: 10}};
    setTimeout(function() {
        result[0].wait = true;
    }, 10);
    console.log(result); // {'0': {val: 10}}
    return next(null, result);
};

Консоль выводит именно то, что я ожидал. result[0].wait не определено в этом контексте. Но ответные данные JSON действительно запутали меня.

{
    "data":{
        "0":{
            "val": 10,
            "wait": true
        }
    }
}

Я не понимаю, почему "wait": true был там. Затем я увеличил время задержки до 100. data[0].wait пропал. loopback выполняет задержку в спине?

1 Ответ

0 голосов
/ 05 ноября 2018

Это поведение не имеет ничего общего с обратной связью, это особенность node.js. node.js по своей природе асинхронный (и если вам нужен синхронный код, вам нужно использовать некоторые приемы, такие как Promise, асинхронные библиотеки, ...). но это не только это. console.log является исключением и является блокирующим вызовом ввода-вывода, и в вашем случае, когда ваш setTimeout вызывается со значением, меньшим, чем время блокировки, вы получаете "wait": true в своем результате, в противном случае он возвращает результат перед выполнением это изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...