我正在尝试创建一个函数,负责检查布尔值并提前退出并发出警告,如果为true。
这是我想要实现的例子:
function warnAndDie(shouldDie) {
if(shouldDie) {
console.log("go away, i'm dying!");
// TODO: some code to cause the calling function to exit early
}
}
function triggerTheWarnAndDie() {
shouldWarnAndDie(true);
console.log("I should never run!");
}
function dontTriggerTheWarnAndDie() {
shouldWarnAndDie(false);
console.log("I should run!");
}
我能做些什么才能使warnAndDie
能够使调用函数提前终止?
谢谢
答案 0 :(得分:3)
您有几种选择。我将为您列出两个非常基本的:
返回一个值(可能是布尔值)并根据初始返回值从调用者返回
function shouldWarnAndDie(shouldDie) {
if(shouldDie) {
console.log("go away, i'm dying!");
return true;
}
return false;
}
function triggerTheWarnAndDie() {
var hasDied = shouldWarnAndDie(true);
if (hasDied) return;
console.log("I should never run!");
}
抛出异常
function shouldWarnAndDie(shouldDie) {
if(shouldDie) {
throw "Go away, i'm dying!";
// or cleaner:
// throw new dyingException("Go away, i'm dying!");
}
}
function triggerTheWarnAndDie() {
try {
shouldWarnAndDie(true);
console.log("I should never run!");
}
catch(err) {
console.log(err+" He's dead Jim!");
}
}
现在有更多的高级机制可能超出你的范围,但关于回调和承诺的LINQ's nice answer绝对值得一看。
答案 1 :(得分:2)
这可以通过基本exception
处理来实现。在这里,我创建了一个自定义异常,可以使用try catch
语句捕获。
function shouldWarnAndDie(shouldDie) {
if(shouldDie) {
throw new DyingException();
}
}
function triggerTheWarnAndDie() {
try {
shouldWarnAndDie(true);
} catch(err) {
console.log(err.message);
return;
}
console.log("I should never run!");
}
function dontTriggerTheWarnAndDie() {
try {
shouldWarnAndDie(false);
} catch(err) {
console.log(err.message);
return;
}
console.log("I should run!");
}
// custom Exception handler
function DyingException() {
// do some custom exception handling here
return new Error("Go away, I am dying!");
}
triggerTheWarnAndDie(); // Go away, I am dying!
dontTriggerTheWarnAndDie(); // I should run!
答案 2 :(得分:0)
使用
return;
要退出的关键字
*这只是一个快速的解决方法。您可能希望查看错误检查和异常......
答案 3 :(得分:0)
我建议使用promises,但在所有浏览器中都不支持它。我们可以使用回调,其中回调内的代码仅在warnAndDie
允许执行时执行。
function warnAndDie(shouldDie, fn) {
if(shouldDie) {
console.log("go away, i'm dying!");
// TODO: some code to cause the calling function to exit early
return;
}
fn();
}
function triggerTheWarnAndDie() {
shouldWarnAndDie(true, function () {
console.log("I should never run!");
} );
}
function dontTriggerTheWarnAndDie() {
shouldWarnAndDie(false, function () {
console.log("I should run!");
} );
}