在 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++;
}
我必须从 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++;
}