如何从 Javascript 中的连续函数返回布尔值?
Posted
技术标签:
【中文标题】如何从 Javascript 中的连续函数返回布尔值?【英文标题】:How can I return boolean value from consecutive functions in Javascript? 【发布时间】:2016-09-10 23:57:41 【问题描述】:我想学习,如果上一个函数返回 true,我想运行下一个函数。比如有一个主函数,有3个子函数。
会是这样的:如果第一个函数返回true,运行第二个,如果第二个返回true,运行第三个函数,如果第三个函数返回true,那么main函数也返回true。
谁能给我一个简单的例子。我写了一个例子,但它总是返回 false :) 我想为此学习合乎逻辑的最佳方法。从现在开始谢谢大家:)
我的例子:
var uname;
$("#username").keyup(function()
uname = checkUsername();
console.log(checkUsername());
); // Username keyup
function allowedChars()
var username = document.getElementById("username").value;
var chars = /^[a-zA-Z0-9\.\_]*$/;
if(chars.test(username) == true)
$("#notName").html("").show();
return true;
else
$("#notName").html("Username can just contain A-Z, 0-9, dot and underscore!").show();
return false;
// allowedChars
function unameLen()
var username = document.getElementById("username").value;
if ((username.length > 3) && (username.length < 20))
$("#notName").html("").show();
return true;
else
$("#notName").html("Username must be between 3 and 20 characters!").show();
return false;
function unameAvl()
var username = document.getElementById("username").value;
$.post("check.php", username: username ,
function(result)
if (result == true)
$("#notName").html("").show();
return true;
else
$("#notName").html("Username is already exists!").show();
return false;
);
function checkUsername()
allowedChars();
if (allowedChars())
unameLen();
if (unameLen())
unameAvl();
if (unameAvl())
return true
else
return false;
【问题讨论】:
这背后没有魔法。 我只是一个新程序员。你可以更有礼貌。我知道没有魔法,感谢您的有用评论。 【参考方案1】:您可以使用&&
运算符为您执行此操作,因为它实现了短路布尔逻辑。
将您的 checkUserName
方法更改为此,看看它是如何工作的:
function checkUsername()
return allowedChars() && unameLen() && unameAvl();
在这种情况下,当allowedChars
返回真时,它会下一次调用unameLen
。如果unameLen
返回true,它将调用unameAvl
。如果任何函数返回 false,checkUsername 函数将返回 false,如果它们都返回 true,则返回 true。
这也将修复unameAvl
的返回值,使其返回一个布尔值,而不是未定义的。
function unameAvl()
var success = false;
var username = document.getElementById("username").value;
$.post("check.php", username: username ,
function()
$("#notName").html("").show();
success = true;
).fail(function()
$("#notName").html("Username is already exists!").show();
success = false;
);
return success;
jQuery 的$.post
不期望成功时回调的返回值,因此返回值被丢弃。 unameAvl
的返回值必须从函数中设置,因此它必须通过变量 (success
) 传达该状态。
回调函数的参数也不正确。 jQuery 将回调函数的签名记录为Function(PlainObject data, String textStatus, jqXHR jqXHR)
,但实际使用的函数的签名不正确为Function(boolean result)
。函数参数不会在回调函数中使用,因此参数列表可以(并且是)安全地省略。
回调仅在成功时调用,因此还需要提供失败回调。这是通过链接到$.post
调用的$.fail
方法完成的。
查看这些文档页面:
jQuery $.post jQuery jqXHR object(失败回调) jQuery $.ajax所有这些更改共同使 Ajax 调用正常工作并正确报告成功状态作为返回值unameAvl
。这正确地允许短路逻辑按预期工作。
【讨论】:
谢谢我现在正在尝试:) 对不起,我是一个新程序员,我第一次看到这个案例。如何在 google 上搜索此案例以了解更多信息? 如果你搜索“javascript short circuit”,你会发现一些很好的例子和描述。 我尝试了您的示例,如果出现问题,它可以工作,但是当一切正常时,它返回未定义。你知道为什么吗? 好的,情况是unameAvl
没有返回true或false,只有$.post
的回调方法返回了一个布尔值。 unameAvl
的返回值未定义,因为该函数中没有返回值。我将在我的答案中包括如何解决这个问题。
你的回答太棒了!一切都好。非常感谢,现在我必须了解更多关于 ajax 的信息 :)以上是关于如何从 Javascript 中的连续函数返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章
如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?
如何从订阅另一个函数的observable的函数返回布尔值?
如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查