我只是在使用nodejs。我写了一个返回变量的函数。当我调用该函数时,即使通过我尝试返回的变量也有值,我也得到未定义的返回。
function getDistance() {
var MICROSECDONDS_PER_CM = 1e6 / 34321;
var trigger = new Gpio(23, { mode: Gpio.OUTPUT });
var echo = new Gpio(18, { mode: Gpio.INPUT, alert: true });
trigger.digitalWrite(0); // Make sure trigger is low
var startTick;
var prox;
trigger.trigger(10, 1);
echo.on('alert', (level, tick) => {
if (level == 1) {
startTick = tick;
} else {
var endTick = tick;
var diff = (endTick >> 0) - (startTick >> 0); // Unsigned 32 bit arithmetic
prox = diff / 2 / MICROSECDONDS_PER_CM;
distance = prox;
console.log(prox);
}
});
return prox;
};
它不返回代理值吗? 当我打电话时,我得到“未定义的返回”
答案 0 :(得分:1)
getDistance
不能是同步函数,因为它必须等待'alert'事件来计算prox
。一种替代方法是返回Promise,而不是立即得到答案:
function getDistance() {
return new Promise((resolve, reject) => {
var MICROSECDONDS_PER_CM = 1e6 / 34321;
var trigger = new Gpio(23, { mode: Gpio.OUTPUT });
var echo = new Gpio(18, { mode: Gpio.INPUT, alert: true });
trigger.digitalWrite(0); // Make sure trigger is low
var startTick;
var prox;
trigger.trigger(10, 1);
echo.on('alert', (level, tick) => {
if (level == 1) {
startTick = tick;
} else {
var endTick = tick;
var diff = (endTick >> 0) - (startTick >> 0); // Unsigned 32 bit arithmetic
prox = diff / 2 / MICROSECDONDS_PER_CM;
distance = prox;
console.log(prox);
resolve(prox);
}
});
});
}
// Use it
getDistance().then(result => {
// do stuff
});
// or with syntactic sugar
const result = await getDistance();