我有一段代码基本上可以监听加速度计和陀螺仪并进行一些操作。代码运行得很好,但是今天,我尝试将这个功能分成两半:
我遇到的问题是,如果我在回调中做任何可能需要一些时间的操作,我就不会得到后续的回调。
我遇到的问题是我的回调确实被调用了,但是调用我回调代码中的其他函数会导致应用程序“卡住”(没有对订阅的进一步更新)
以下是代码:
在 sensors.ts
中 type SensorCallbackFunction = (data:any) => void;
注意(我也尝试使用Function
代替上述类型)
startAllSensors(onAccData:SensorCallbackFunction, onGyroData:SensorCallbackFunction) {
// listen to acc. data
this.accSub = this.deviceMotion.watchAcceleration({ frequency: this.freq }).subscribe((acceleration: DeviceMotionAccelerationData) => {
console.log (">>>>>>>>>>>>> ACC CALLBACK")
onAccData(acceleration);
});
// listen to gyro data
this.gyrSub = this.gyroscope.watch({ frequency: this.freq })
.subscribe((gyroscope: GyroscopeOrientation) => {
console.log (">>>>>>>>>>>>> GYR CALLBACK")
onGyroData(gyroscope);
});
}
在调用此服务的组件中:
this.sensors.startAllSensors(this.accDataReceived, this.gyroDataReceived);
组件中的功能:
accDataReceived(data) {
console.log ("acc data:"+JSON.stringify(data));
}
gyroDataReceived(data) {
console.log ("gyr data:"+JSON.stringify(data));
}
这很有效
但是当我扩展任一回调的功能时,我会停止获取后续通知(也就是说,服务不会调用这些回调)。
但是,当我扩展回调函数以调用其他函数时,我停止获取后续通知(即,这些回调不会被服务调用)
例如,我刚刚将这段代码添加到两个回调中:
let dataClone = data.map(x => Object.assign({}, x));
this.doMoreStuff();
热潮,我停止了订阅更新。我也试过调用另一个在其中绘制图表的函数,我遇到同样的问题。
这让我相信我在某种程度上误解了函数回调应该如何工作以及代码中对回调的期望是什么。
感谢。