我正在编写一些node.js来通过串口连接与传感器进行交互.用于读取传感器的代码当然是异步的.但是,在我的控制代码中,我需要读取传感器,根据值执行某些操作,再次读取,执行其他操作等.为此,我使用的代码类似于以下自包含测试:
var main = new Main();
main.next();
function* Main()
{
var reading = yield readSensor(this.next.bind(this));
console.log(reading);
var reading = yield readSensor(this.next.bind(this));
console.log(reading);
}
function readSensor(callback)
{
// simulate asynchrounous callback from reading sensor
setTimeout(function sensorCallback() { callback('foo'); }, 100);
}
Run Code Online (Sandbox Code Playgroud)
所以,我的顺序控制代码在一个生成器中,readSensor()当它需要读取时产生.传感器读取完成后,它会调用回调,然后控制返回主代码.我这样做是因为我可能需要根据之前的读数以不同的顺序读取各种传感器.所以,这是一个值得怀疑的部分:我this.next.bind(this)作为回调函数传递给异步读取函数.当启用生成器(--harmony_generators)时,代码似乎工作,但我想知道这里是否存在我遗漏的陷阱.我对JS比较新,所以不要害怕指出明显的:)
我有一个没有动画循环的静态场景,并且尝试使用 TrackballControls 的更改事件来触发遵循此线程中的模式的渲染函数,即:
var controls = new THREE.TrackballControls( camera, renderer.domElement );
controls.addEventListener( 'change', render );
function render() {
renderer.render( scene, camera );
}
Run Code Online (Sandbox Code Playgroud)
这对于 OrbitControls 效果很好,但是当我替换 TrackballControls 时,更改事件不会触发。但是,如果我添加以下行:
_this.update();
Run Code Online (Sandbox Code Playgroud)
在 TrackballControls.js 中的 mousewheel()、mousemove() 和 touchmove() 函数末尾,我可以正确触发更改事件(无论如何,就我而言)。我不确定这是否是触发更改事件的最佳方法。分叉 TrackballControls 的本地副本是这种情况的最佳解决方案吗?我是否忽略了某些内容,或者更改 TrackballControls.js 是否有意义?