Fai*_*jad 6 html javascript jquery dom-events
window.onbeforeunload = function() {
if (document.getElementById("parentpan").style.display == "block") {
return "You are logged out.";
Logout();
}
};
Run Code Online (Sandbox Code Playgroud)
我希望在return语句之后调用logout()函数,是否可能?
在return语句之后,您无法执行任何操作.
编辑:该finally语句允许在进行return清理之后执行代码.
(这是XY问题的一个很好的例子:你问Y而从不告诉我们你实际需要什么X).
return语句结束一个函数,你不能在它之后执行代码.你可以这样做:
ret = "You are logged out.";
Logout();
return ret;
Run Code Online (Sandbox Code Playgroud)
您需要的是Logout异步执行。这可以通过使用setTimeout其他人所说的函数在 JavaScript 中轻松实现。这是我常用的异步调用函数的方法:
Function.prototype.async = function () {
setTimeout.bind(null, this, 0).apply(null, arguments);
};
Run Code Online (Sandbox Code Playgroud)
此方法立即(在0ms之后)将函数调用推送到事件循环中。因此该函数在当前代码完成后执行(对你来说是在你返回之后)。这是一个如何使用它的简单示例:
alert.async("This will be displayed later.");
alert("This will be displayed first.");
Run Code Online (Sandbox Code Playgroud)
由于第一个alert是异步调用的,它将在第二个调用之后执行alert。就像在函数调用之前使用async. 这就是你在你的情况下会做的:
window.onbeforeunload = function () {
if (document.getElementById("parentpan").style.display === "block") {
Logout.async();
return "You are logged out.";
}
};
Run Code Online (Sandbox Code Playgroud)
有什么缺点?由于该函数在事件循环中被阻塞,它可能永远没有机会执行(因此用户永远不会注销)。可能会出现这样的情况。它通常发生在控件进入无限循环或由于阻塞 AJAX 请求而挂起时。
不过,这对您来说是个好消息,这种情况发生在非常罕见的情况下。所以不用担心。就像setTimeout其他人开玩笑一样使用,你会做得很好。我个人认为您应该在返回消息之前注销"You are logged out.",但这是您的应用程序。
新年快乐。干杯!
小智 5
最好的方法和最有效的方法是 try, catch and finally
catch 是可选的
`try{
// do something
return;
} finally {
// call function after return
}`
Run Code Online (Sandbox Code Playgroud)
https://youtu.be/Is_o_L-ZIS8这对你有帮助
| 归档时间: |
|
| 查看次数: |
11558 次 |
| 最近记录: |