我有一个使用蓝牙连接两个设备的android应用。 (我正在使用BLE-PLX库)
此刻,我使用一个功能连接到第一个设备,在此功能内使用另一个功能连接到第二个设备。现在的问题是第二个功能开始之前有大约10/15秒的延迟。
您认为我该如何取消此延迟? 想象还有另一个类似于 ScanL()
的函数。scansDevices(){
let promise1 = this.scanDx();
let promise2 = this.scanSx();
Promise.all([promise1, promise2])
.then( () => {
console.log("Inzio scansione")
})
.catch(() => {
Alert.alert("Errore ScansDevices()");
});
}
scanR() {
this.manager.startDeviceScan(null, null, (error, device) => {
if (error) {
return;
}
if(device.name == this.model_sx(this.props.Model)) {
this.scanR()
}
if (device.name == this.model_dx(this.props.Model)) {
this.setState({rightDevice: device.id})
this.manager.stopDeviceScan();
device
.connect()
return new Promise((resolve,reject) => {
then(() => {
this.deviceService_Dx(device);
})
.catch(() => {
Alert.alert("ERROR.");
Actions.homepage();
});
})
}
});
}
我读到我应该使用Promise.all同时执行这些功能,但是我不知道该怎么做。
答案 0 :(得分:2)
延迟可能来自必须等待设备连接才能执行scanL()
。如果您必须等待其连接并且仅在之后使用scanL()
,则您的解决方案是正确的方法,并且无法减少延迟。
但是,如果您不这样做,则可以同时使用device.connect()
和scanL()
命令并等待它们同时完成-您可以使用Promise.all()
。 / p>
Promise.all()是一个promise,当一个promise数组中的所有promise都被解析或在数组的一个promise中的一个被拒绝时被拒绝时,它就会解决。
示例:
let promise1 = asyncOp();
let promise2 = asyncOp2();
Promise.all([promise1, promise2]).then( () => { /*will execute only if and when both promises are resolved */} )
.catch( () => { /* execute if and when *ONE* of the promises is rejected*/} );
因此,要使用它,scanL()
必须返回一个承诺。
如果不是,则可以考虑将其从.then
子句中删除。传递给.then
的函数仅在承诺被解决时执行,但与此同时,代码将继续从创建承诺的位置开始按顺序执行。如果将其从then
中拉出,它将在通过device.connect()
方法创建了promise之后立即执行它,而不会等待它解决。