如何等待非阻塞API函数?

时间:2019-06-20 13:04:38

标签: javascript asynchronous callback async-await

我正在使用无法更改的API函数:

xMotor.ccw().step(1, function() { /*callback*/ });

它用于控制步进电机,该步进电机应将电机实际旋转一定步数。现在,我需要转动电动机,直到实际按下按钮为止,并且我要测量行进的length。我现在就这样处理:

var length = 0;

async function initialize(){

    while (motor.checkButton(buttonPin)) {
        xMotor.ccw().step(1, function() { /*CALLBACK*/ });
        length++;
        await sleep(10);
    }
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

但是由于该API函数是非阻塞的,所以我的length变量可以计数。实际上,while循环是快速移动电机一步的方法。我可以增加sleep的值,但这似乎不是一个好的解决方案,并且电动机的运动会非常不稳定。

所有I / O信号都从Arduino运行。我正在使用Johnny-five框架。

谢谢!

0 个答案:

没有答案