环回 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 进行更改之前的结果。
我对 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 进行更改之前的结果。