gpt4 book ai didi

javascript - Stack Overflow - 递归回调 - JavaScript

转载 作者:行者123 更新时间:2023-11-28 13:24:26 24 4
gpt4 key购买 nike

我正在使用 cylon.js 使用 node.js 编写一些电机控制。我有一个伺服系统,当你给它一个 Angular 时,它有一个回调函数。当它完成该函数时,我想再进行一次读取,并给它一个新的 Angular ,并通过回调进行另一次读取......依此类推。

当前代码是:

function ControlServo(servo, angleSensor){
robo.servo.angle(angleSensor.Read(), controlServo(servo, angleSensor));
}

大约四分之一秒后堆栈就会溢出。

最佳答案

用 Cylon.js 不可能做你想做的事。 Cylon.js 的内部“写入”操作“回调”不是异步的,并且在机械完成移动时不会被调用。写操作后立即调用它。 Cylon 只能将 Angular 值写入伺服系统,伺服系统以最大速度机械地移动喇叭。如果它是一个慢速伺服系统,从 0 度到 180 度可能需要 2 秒的时间才能真正完成机械操作。与此同时,Cylon 已经调用了回调。这样做的原因是,在不做一些额外工作的情况下,无法以对所有伺服模型始终正确的方式概括回调行为。

在约翰尼五号中,我们实现了通过提供“完成时间”参数来启用的速度控制。这是通过将到新 Angular 距离划分为在指定的“完成时间”内移动的步骤来完成的。此过程的一个副作用是 Johnny-Five 伺服实例可以知道移动何时以机械方式完成,因为步骤更小并且时间受到控制。因此,我们有一个“move:complete”事件,该事件在任何定时移动完成时发出。

var servo = new five.Servo(9);servo.on("move:complete", function() {  // we've arrived! });// change takes 500ms to completeservo.to(180, 500);

可以轻松地与模拟传感器结合使用:

var servo = new five.Servo(9);var sensor = new five.Sensor({  pin: "A0", scale: [ 0, 180 ]});servo.on("move:complete", function() {  update(); });function update() {  // change takes 200ms to complete  servo.to(sensor.value, 200);}update();

更简单:

var servo = new five.Servo(9);var sensor = new five.Sensor("A0");sensor.scale(0, 180).on("change", function() {  servo.to(this.value);});

关于javascript - Stack Overflow - 递归回调 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com