环回 3 setTimeout 奇怪的行为

loopback 3 setTimeout strange behavior

我对 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是否在后面执行延迟?

此行为与环回无关,它是一个 node.js 功能。 node.js 本质上是异步的(如果你想要一个同步代码,你需要使用一些技巧,比如 Promise,异步库,......)。但是,不仅如此。 console.log 是一个例外,它是一个阻塞的 i/o 调用,在您的情况下,当您的 setTimeout 被调用的值小于阻塞时间时,您会在结果中得到 "wait": true,否则它 returns 进行更改之前的结果。