收藏
回答

使用setTimeout包裹方法后,this上面找不到setdata函数,无法进行赋值?

一直怀疑是调用函数、setTimeout、箭头函数改变了this指向,但是修改后对每一层打印this,指向是相同的。不知道问题出现在什么地方。不使用延时器的话直接判断失败的,直接使用:that.devicesList = devicesListArr;可以赋值成功,但是感觉不规范。

data里面定义了数据:devicesList: [],
 searchBlue() { // 搜索附近蓝牙设备
        let that = this;
        uni.startBluetoothDevicesDiscovery({
          allowDuplicatesKey: false,
          success: (res) => {
            console.log(res, "搜索附近蓝牙");
            setTimeout(() => {
              uni.getBluetoothDevices({ // 获取搜索到的设备
                success: (res) => {
                  console.log(res, "搜索到的设备");
                  let devicesListArr = [];
                  if (res.devices.length > 0) {
                    res.devices.forEach((device) => {
                      if (!device.name && !device.localName) {
                        return;
                      } else {
                        devicesListArr.push(device);
                      }
                    });
                     that.setData({    // 报错部分,渲染到页面中
                       devicesList: devicesListArr,
                    }); 
                  } else {
                   console.log("搜索设备失败");                    
                  }
                }
              });
            }, 3000);
          },
          fail: (res) => {
           console.log(res);
          }
        });
      },


最后一次编辑于  2023-02-23
回答关注问题邀请回答
收藏

2 个回答

  • -
    -
    2023-02-23

    报错截图:

    2023-02-23
    有用
    回复
  • 一笑皆春
    一笑皆春
    2023-02-22

    错误日志发一下看看

    2023-02-22
    有用
    回复
登录 后发表内容