Javascript 环回3设置超时异常行为
我被Javascript 环回3设置超时异常行为,javascript,node.js,loopback,Javascript,Node.js,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, resul
环回中的这种奇怪行为弄糊涂了。我创建了一个非常简单的远程方法,如下例所示
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);
};
控制台输出的正是我所期望的<代码>结果[0]。在此上下文中未定义等待。但是JSON数据真的让我困惑
{
"data":{
"0":{
"val": 10,
"wait": true
}
}
}
我不明白为什么“等等”:真的有。然后我将延迟时间增加到100<代码>数据[0]。等待已不存在。loopback
是否在后面执行延迟?此行为与loopback无关,它是node.js的一项功能。本质上是异步的node.js(如果您想要同步代码,您需要使用一些技巧,例如Promise、异步库等等)。但是,不仅仅是这样。console.log是一个例外,它是一个阻塞i/o调用,在您的情况下,当使用小于阻塞时间的值调用setTimeout时,您的结果中会出现“wait”:true
,否则它会在进行更改之前返回结果。是的,我经常在异步回调函数中使用async或putnext()
,主要是在查询数据库时。但是昨天,我将next()
放在了错误的位置,正如您所看到的,但是服务器仍然使用扩展数据响应结果。你的回答让我明白了一点,然后我把它标记为接受。谢谢