javascript - NDEFReader.write 忽略中止信号
问题描述
我正在尝试创建一个可以读取和写入 NFC 标签的简单网页。如果需要,我还希望具有取消写入操作的功能。所以我按照这里和这里的例子。但是,我遇到了一个中止信号被忽略的问题。这个简单的代码可以证明这个问题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
<script>
let data;
let reset_controller = new AbortController();
let ndef;
try {
ndef = new window.NDEFReader();
ndef.addEventListener("readingerror", async () => {
log_error('Cannot read data from the NFC tag.');
});
ndef.addEventListener("reading", async ({message, serialNumber}) => {
data = new TextDecoder('utf-8').decode(message.records[0].data.buffer);
draw_info();
});
} catch (error) {
console.error(error);
}
function draw_info() {
document.getElementById('data').innerHTML = `data is: ${data}`;
}
function reset() {
console.log('Aborted!')
reset_controller.abort();
document.getElementById('data').innerHTML = '';
}
async function read_data() {
data = await ndef.scan();
draw_info();
}
async function write_data() {
console.log('stating write')
try {
await ndef.write("some data", {
AbortSignal: reset_controller.signal
});
} catch (e) {
console.error(e);
}
}
</script>
</head>
<body>
<button onclick="read_data()">Read</button>
<button onclick="write_data()">Write</button>
<button onclick="reset()">Rest</button>
<p id="data">data is: </p>
</body>
</html>
重复这个问题:
1-单击写入按钮。
2-单击重置以取消写入。
- 接近一个标签。
标签现在包含不应包含的字符串“一些数据”
解决方案
好的,我发现了问题。
当我们将选项对象传递给 write 函数时,中止信号应该放在“信号”属性而不是“AbortSignal”
推荐阅读
- rust - 如何将对任何类型的引用转换为对长度为 1 的数组的引用?
- javascript - 如何在 Highcharts 中隐藏类别中的空堆积列?
- c# - MS Bot ThumbnailCard 在 Facebook Messenger 上抛出错误
- stm32f4 - FATFS与定时器中断STM32f407VG冲突
- file-upload - (反应管理员)如何以二进制格式上传图像?
- cron - 有没有可以运行二级crontab的Linux包
- c++ - C++20 中反射的当前状态
- python - 如何将 Python 函数转换为 SymPy?
- javascript - 检测特定用户的 Firebase 实时更改
- javascript - 在组件之间从 Vuex 数组传递对象时失去 Vue 反应性