【发布时间】:2020-11-17 14:58:23
【问题描述】:
我遇到了一个问题,即 window.open 被调用太快,而我的其他函数没有完成并在我的 onclick 函数中及时发布。
我尝试在 trackData() 上设置超时,但它只是偶尔起作用,我不想设置更长的超时。
点击
{() => {
trackData();
window.open("https:google.com", "_self");
})
有什么想法吗?
编辑:以下内容在本地工作,但在生产时不跟踪。如果 "_self" 被替换为 "_blank"(这是不可能的),则跟踪每次都有效
let postData = async(value) => {
await tracker({
action: value,
})
}
tracker 只是通过操作发布 axios 帖子
<div
className="exampleBTN"
onClick={() => {
postData("example").then(
window.open("https://google.com",
"_self")
)}
}
>
</div>
在本地,我可以看到数据进入数据库。
但是,在线它不起作用。仅当其中任何一个为真时才有效:
- onClick 中没有 window.open
- 没有“_self”而是“_blank”,因此它会在新标签页中打开
我认为我的异步是错误的,所以我也尝试了以下方法:
onClick={async () => {
await postData("example").then(
window.open("google.com", "_self"))
}}
【问题讨论】:
-
你能分享更多的代码吗?我们不知道 trackData 做了什么,所以我们无能为力。
-
@pytness,这只是一个 axios 帖子。这与问题无关(我相信无论如何)。 trackData 并不总是在打开新窗口之前完成发布。如果我从 onClick 中删除“window.open” - 它每次都会发布 axios。
标签: javascript reactjs onclick