我对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
会在后面延迟吗?
答案 0 :(得分:2)
此行为与回送无关,它是node.js的功能。 node.js本质上是异步的(如果您想要同步代码,则需要使用一些技巧,例如Promise,异步库等)。但是,不仅如此。 console.log是一个例外,它是一个阻塞的I / O调用,在您的情况下,以小于阻塞时间的值调用setTimeout时,结果中将得到"wait": true
,否则将返回结果在进行更改之前。