NDEFReader.write 忽略中止信号
Posted
技术标签:
【中文标题】NDEFReader.write 忽略中止信号【英文标题】:NDEFReader.write ignoring the abort signal 【发布时间】:2021-06-23 10:50:30 【问题描述】:我正在尝试创建一个可以读取和写入 NFC 标签的简单网页。如果需要,我还希望具有取消写入操作的功能。所以我遵循了here 和here 的例子。但是,我遇到了一个中止信号被忽略的问题。这个简单的代码可以说明问题:
<!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-点击reset取消写入。
-
接近标签。
标签现在在不应该包含字符串“一些数据”的地方
【问题讨论】:
【参考方案1】:好的,我找到了问题。
当我们将选项对象传递给 write 函数时,中止信号应放置在 'signal' 属性而不是 'AbortSignal'
【讨论】:
【参考方案2】:的确如此。选项字典的键应该是signal
,而不是AbortSignal
。查看代码示例https://web.dev/nfc/#abort-nfc-operations
const abortController = new AbortController();
abortController.signal.onabort = event =>
// All NFC operations have been aborted.
;
const ndef = new NDEFReader();
await ndef.scan( signal: abortController.signal );
await ndef.write("Hello world", signal: abortController.signal );
document.querySelector("#abortButton").onclick = event =>
abortController.abort();
;
【讨论】:
以上是关于NDEFReader.write 忽略中止信号的主要内容,如果未能解决你的问题,请参考以下文章
InternalError:当前事务被中止,命令被忽略直到事务块结束