在 while 循环中调用异步函数

Call async function in a while loop

我必须从 BLE devive 读取一个值,然后将另一个值写入它,所以这是我的功能:

   getBit = (device) => {
        try {
            device.readCharacteristicForService(this.state.sUuid, this.state.cUuid2)
            .then((read) => {
                switch (this.toHexByte(read.value)) {
                    case 'ee':
                        this.setState({ countC0: 0 });
                        break;
                    case 'c0':
                        this.setState({ countC0: this.state.countC0 + 1 });
                        break;
                    default: // the bit I want to stock
                        this.setState({
                            resId: [...this.state.resId, this.toHexByte(read.value)],
                            countC0: 0
                        });
                        break;
                }
                device.writeCharacteristicWithoutResponseForService(this.state.sUuid, this.state.cUuid2, this.state.respBit)
            })
            return
        }
        catch (err) {
            console.log("find catch error:", err);
        }
    }

但是我必须调用这个函数直到我得到相同的位 ('c0') 3 次所以我这样循环:

   while (countC0 < 15) {
     this.getBit(device);
     countC0++;
   }

问题是我收到 Please report: Excessive number of pending callbacks: 501 错误,因为我在 while 循环中调用异步函数。

应该这样做

getBit = async (device) => {
    try {
        const read = await device.readCharacteristicForService(this.state.sUuid, this.state.cUuid2)


        switch (this.toHexByte(read.value)) {
            case 'ee':
                this.setState({ countC0: 0 });
                break;
            case 'c0':
                this.setState({ countC0: this.state.countC0 + 1 });
                break;
            default: // the bit I want to stock
                this.setState({
                    resId: [...this.state.resId, this.toHexByte(read.value)],
                    countC0: 0
                });
        }

        device.writeCharacteristicWithoutResponseForService(this.state.sUuid, this.state.cUuid2, this.state.respBit)
    }
    catch (err) {
        console.log("find catch error:", err);
    }
}
  while (countC0 < 15) {
     await this.getBit(device);
     countC0++;
   }