在javascript中返回语句后执行语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在javascript中返回语句后执行语句相关的知识,希望对你有一定的参考价值。
window.onbeforeunload = function() {
if (document.getElementById("parentpan").style.display == "block") {
return "You are logged out.";
Logout();
}
};
我希望在return语句之后调用logout()函数,是否可能?
return语句结束一个函数,你不能在它之后执行代码。你可以这样做:
ret = "You are logged out.";
Logout();
return ret;
我猜测Logout是一个耗时的过程,您希望在执行之前向用户提供反馈:
setTimeout(Logout,1);
return "You are logged out.";
在return语句之后,您无法执行任何操作。
编辑:finally
语句允许在return
之后执行代码以进行清理。
(这是XY问题的一个很好的例子:你问Y而从不告诉我们你实际需要什么X)。
你需要的是异步执行Logout
。这可以通过使用setTimeout
函数在javascript中轻松实现,正如其他人所说的那样。这是我通常用来异步调用函数的方法:
Function.prototype.async = function () {
setTimeout.bind(null, this, 0).apply(null, arguments);
};
此方法立即将函数调用推送到事件循环(在0
ms之后)。因此,该函数在当前代码完成后执行(返回后为您执行)。这是一个如何使用它的简单示例:
alert.async("This will be displayed later.");
alert("This will be displayed first.");
由于第一个alert
被异步调用,它将在第二次调用alert
之后执行。就像使用async
调用函数一样简单。这就是你在你的情况下会做的事情:
window.onbeforeunload = function () {
if (document.getElementById("parentpan").style.display === "block") {
Logout.async();
return "You are logged out.";
}
};
有什么缺点?由于函数在事件循环中被阻塞,因此可能永远不会有机会执行(因此用户永远不会注销)。可能会出现这种情况。它通常发生在控件进入无限循环或由于阻塞的AJAX请求而挂起时。
然而,对你来说这是个好消息,这种情况发生在极少数情况下。所以不要担心。只要使用setTimeout
就像其他人一样正在哄骗你,你会做得很好。我个人认为你应该在返回"You are logged out."
的消息之前注销,但这是你的应用程序。
新年快乐。干杯!
最好的方法和最有效的方法是**尝试,捕获,最后**
catch是可选的
`try{
// do something
return;
} finally {
// call function after return
}`
https://youtu.be/Is_o_L-ZIS8这对你有帮助
通常,如果您希望在函数返回后执行某些操作,则可以设置计时器:
function myFunction() {
if (document.getElementById("parentpan").style.display == "block") {
setTimeout(Logout, 50); // Logout will be called 50ms later
return "You are logged out.";
}
};
但是,如注释中所述,这对onbeforeunload来说不是一个好主意,因为如果页面首先完成卸载,则不会触发timer事件。
大多数其他回答者都错过了你想要做的事情。你希望window.onbeforeunload
像window.confirm()
一样行事。无法对onbeforeunload事件中的ok操作执行操作。
你需要做的是将它挂在onunload上以执行操作。
window.onbeforeunload = function () {
return "Your session will be logged out"
};
window.onunload = function () {
logout();
}
问题是现代浏览器会杀死很多在unload / beforeunload中运行的进程,以“加速”浏览器,因此速度更快。因此,如果它是异步的,您将遇到竞争条件。
return表示从执行被调用函数返回。当执行return语句时,系统理解函数执行结束,它将切换到调用该函数的主程序。
在程序中,你可以在返回后看到一个语句。但是系统不会检查它。
如果项目中有jquery,则可以使用延迟机制。你可以为这样的持续任务返回promise对象:
function task() {
var defered = $.Deferred();
setTimeout(defered.resolve , 5000);
return defered.promise();
}
function task2() {
var defered = $.Deferred();
setTimeout(defered.resolve , 10000);
return defered.promise();
}
function run() {
return $.when(task(),task2());
}
var promise = run();
promise.done(function(){
alert("All tasks has been completed");
});
您可以使用setTimeout
来实现此目的。您的代码应如下所示
window.onbeforeunload = function() {
if (document.getElementById("parentpan").style.display == "block") {
setTimeout(function(){
Logout();
}, 0);
return "You are logged out.";
}
};
这将确保在return语句后执行Logout
。
以上是关于在javascript中返回语句后执行语句的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript-Runoob:JavaScript 条件语句
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?