尝试在 NodeJs 中调用函数时出现回调错误
callback error, when trying to call a function in NodeJs
我正在尝试通过网络套接字控制 raspberry pi。我找到了一个类似的项目,并一直在围绕它构建我的项目。除了距离传感器工作之外,我已经设法让所有东西都工作了。
tank.getDistance = function () {
async.parallel([
gpio.write(trig,0),
gpio.write(trig,1),
gpio.write(trig,0),
]);
var start,stop;
while(gpio.read(echo) == 0){start = Date.now();}
while(gpio.read(echo) == 1){stop = Date.now();}
var distance = ((stop-start)/1000.0)*17000
console.log("distance: "+ distance);
};
这就是我尝试从超声波传感器读取数据的方式。我已经在 python 中测试了这个逻辑,它在那里工作。
socket.on('keydown', function (dir) {
switch (dir) {
case 'up':
tank.moveForward();
console.log("forward");
tank.getDistance();
break;
...
这是我调用函数的地方。但是每次我调用这个函数,我都会得到一个
/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286
throw new Error('A callback must be provided')
^
Error: A callback must be provided
at Gpio.read.input (/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286:19)
at Object.tank.getDistance (/home/pi/marinaBot/marinaBot/app.js:78:14)
不确定为什么会发生这种情况,因为我没有返回任何东西。我试过使用其他超声波库,如 "r-pi-usonic" 但我不明白它的设置。
有任何想法吗?
刚开始学习 NodeJS。这可能真的很简单。
gpio.read(echo, callbackfunction(error, data){})
请查看此文档
https://github.com/JamesBarwell/rpi-gpio.js#readchannel-callback
while
需要 async/await
函数
var gpio = require('rpi-gpio')
var gpio_read = function (channel) {
return new Promise(resolve => {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
resolve(result);
});
});
}
var echo = 16;
var calculateDistance = async function () {
var start, stop;
while (await gpio_read(echo) == false) { start = Date.now(); }
while (await gpio_read(echo) == true) { stop = Date.now(); }
var distance = ((stop - start) / 1000.0) * 17000
console.log("distance: " + distance);
}
gpiop.setup(echo, gpio.DIR_IN)
.then(function () {
calculateDistance();
})
.catch((err) => {
console.log('Error: ', err.toString())
})
更新内容:
1. 使用 async
作为
创建了 calculateDistance
函数
var calculateDistance = async function () { ... }
return new Promise
我正在尝试通过网络套接字控制 raspberry pi。我找到了一个类似的项目,并一直在围绕它构建我的项目。除了距离传感器工作之外,我已经设法让所有东西都工作了。
tank.getDistance = function () {
async.parallel([
gpio.write(trig,0),
gpio.write(trig,1),
gpio.write(trig,0),
]);
var start,stop;
while(gpio.read(echo) == 0){start = Date.now();}
while(gpio.read(echo) == 1){stop = Date.now();}
var distance = ((stop-start)/1000.0)*17000
console.log("distance: "+ distance);
};
这就是我尝试从超声波传感器读取数据的方式。我已经在 python 中测试了这个逻辑,它在那里工作。
socket.on('keydown', function (dir) {
switch (dir) {
case 'up':
tank.moveForward();
console.log("forward");
tank.getDistance();
break;
...
这是我调用函数的地方。但是每次我调用这个函数,我都会得到一个
/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286
throw new Error('A callback must be provided')
^
Error: A callback must be provided
at Gpio.read.input (/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286:19)
at Object.tank.getDistance (/home/pi/marinaBot/marinaBot/app.js:78:14)
不确定为什么会发生这种情况,因为我没有返回任何东西。我试过使用其他超声波库,如 "r-pi-usonic" 但我不明白它的设置。 有任何想法吗? 刚开始学习 NodeJS。这可能真的很简单。
gpio.read(echo, callbackfunction(error, data){})
请查看此文档
https://github.com/JamesBarwell/rpi-gpio.js#readchannel-callback
while
async/await
函数
var gpio = require('rpi-gpio')
var gpio_read = function (channel) {
return new Promise(resolve => {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
resolve(result);
});
});
}
var echo = 16;
var calculateDistance = async function () {
var start, stop;
while (await gpio_read(echo) == false) { start = Date.now(); }
while (await gpio_read(echo) == true) { stop = Date.now(); }
var distance = ((stop - start) / 1000.0) * 17000
console.log("distance: " + distance);
}
gpiop.setup(echo, gpio.DIR_IN)
.then(function () {
calculateDistance();
})
.catch((err) => {
console.log('Error: ', err.toString())
})
更新内容:
1. 使用 async
作为
calculateDistance
函数
var calculateDistance = async function () { ... }
return new Promise