收藏
回答

使用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
回答关注问题邀请回答
收藏

3 个回答

  • -
    -
    2023-02-23

    报错截图:

    2023-02-23
    有用
    回复
  • 朝酒晚舞
    朝酒晚舞
    2023-02-22

    如果你的devicesListArr 不用渲染到页面上 就不用setData。如果要渲染到页面上提供下 报错截图

    2023-02-22
    有用
    回复 7
    • -
      -
      2023-02-23
      已提供报错截图
      2023-02-23
      回复
    • 朝酒晚舞
      朝酒晚舞
      2023-02-23回复-
      这个错误 跟你的this.setData没关系哇。这个应该是 传参错误问题吧。举个例子:
      2023-02-23
      回复
    • -
      -
      2023-02-23回复朝酒晚舞
      不用再次赋值,devicesListArr可以打印结果
      2023-02-23
      回复
    • -
      -
      2023-02-23回复朝酒晚舞
      那应该是这里的问题!!!
      2023-02-23
      回复
    • 朝酒晚舞
      朝酒晚舞
      2023-02-23回复-
      - -我傻了,你用的是uniapp吧? uniapp里直接赋值 就是小程序里的 setData
      2023-02-23
      回复
    查看更多(2)
  • 一笑皆春
    一笑皆春
    2023-02-22

    错误日志发一下看看

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