同时运行两个功能

时间:2019-08-05 13:05:49

标签: javascript react-native

我有一个使用蓝牙连接两个设备的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同时执行这些功能,但是我不知道该怎么做。

1 个答案:

答案 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之后立即执行它,而不会等待它解决。