gpt4 book ai didi

javascript - 同时运行两个函数

转载 作者:行者123 更新时间:2023-12-01 00:46:00 25 4
gpt4 key购买 nike

我有一个 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 同时执行这些函数,但我不知道该怎么做。

最佳答案

延迟可能是因为必须等待设备连接才能执行 scanL()。如果您必须等待它连接并且仅在之后使用 scanL() - 您的解决方案是正确的方法,并且无法减少延迟。

但是,如果您不这样做,您可以同时使用 device.connect() 命令和 scanL() 命令并等待它们完成同时 - 您可以使用 Promise.all()

Promise.all() 是一个 Promise,当一组 Promise 中的所有 Promise 都得到解决时,该 Promise 就会被解析;或者当该数组中的一个 Promise 被拒绝时,该 Promise.all() 就会被拒绝。

示例:

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() 必须返回一个 promise 。如果没有 - 您可以考虑将其从 .then 子句中取出。传递给 .then 的函数仅在 Promise 解析时执行,但同时代码继续从创建 Promise 的位置开始按顺序执行。如果您将其从 then 中取出,它将在从 device.connect() 方法创建 Promise 后立即执行它,并且不会等待它解析。

关于javascript - 同时运行两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com