Завершить Javascript без ошибок/исключений

Мне нужно завершить javascript из функции, чтобы он не выполнял следующий блок кодов и другие функции, вызываемые сценарием, который следует за текущей функцией.

Я нашел этот существующий вопрос в SO: Как завершить сценарий в Javascript , где дается решение, чтобы вызвать ошибку/исключение, которое немедленно прекратит выполнение скрипта.

Но мой случай отличается, потому что моя цель завершения сценария - предотвратить ошибку, которая будет исходить от следующих функций, если текущая функция не остановит выполнение сценария. Таким образом, запуск другой ошибки для предотвращения ошибки не решает мою задачу!

Итак, есть ли другой способ завершить javascript вместо того, чтобы выдавать ошибку/исключение?

Пожалуйста, внимательно прочитайте мой вопрос, прежде чем помечать его как дубликат, я уже объяснил, почему это не решает мою проблему с вопросом, на который я ссылался!.


person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ    schedule 12.01.2016    source источник
comment
Возможный дубликат Как завершить скрипт в Javascript   -  person David Hoelzer    schedule 12.01.2016
comment
Ваше требование является необоснованным в среде браузера. Вам нужно будет перестроить свою логику, чтобы вы могли просто не вызывать функции, которые будут ошибаться. Или установите флаг, который они проверяют и возвращают раньше, если он установлен или что-то в этом роде.   -  person Chris Tavares    schedule 12.01.2016
comment
Я прочитал его полностью, Тарек. Разве вы не читали предложения здесь и все ответы там? Создайте управляющую структуру в функции main и вернитесь к ней из своей функции. Затем у вас есть возможность решить, будете ли вы продолжать операции или разрешите завершение сценария.   -  person David Hoelzer    schedule 12.01.2016
comment
Можно ли использовать jQuery?   -  person guest271314    schedule 12.01.2016
comment
@guest271314, Конечно, если можно без ошибок.   -  person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ    schedule 12.01.2016
comment
@DavidHoelzer, я уже ответил вам там, Завершите Javascript без ошибок / исключений, мой заголовок четко объясняет, чего я хочу, что никоим образом не дублирует упомянутый вопрос, и решение структуры управления приемлемо только в том случае, если нет другого простого решения. Мне просто нужно подтвердить это.   -  person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ    schedule 12.01.2016
comment
Значит вы не все ответы прочитали. Один из них — именно то, на что Ик ответил.   -  person David Hoelzer    schedule 12.01.2016
comment
@DavidHoelzer Я не знаю, о каком из них вы пытаетесь упомянуть. Можете ли вы просто поделиться ссылкой на ответ здесь?   -  person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ    schedule 12.01.2016
comment
И вы пытаетесь сказать, что мы не должны искать лучшего решения, если что-то достигается любым путем. Например, нам не следует искать такую ​​функцию, как Array.map(), если того же самого можно добиться, проделав трюк с Array.forEach()?   -  person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ    schedule 12.01.2016


Ответы (2)


Поскольку вы находитесь внутри функции, просто return.

Читая ваш вопрос немного больше, что он не выполняет «другие функции, вызываемые сценарием», вы должны вернуть логическое значение. Например, верните false, если вы не хотите, чтобы остальные вызывались, а затем заключите оставшиеся операторы в if:

function Foo() {
    if (weAreInLotsOfTrouble) {
        return false;
    }

    return true;
}

DoSomething();
DoSomethingElse();

if (Foo()) {
    DoSomethingDangerous();
}
person lc.    schedule 12.01.2016
comment
Это приведет только к завершению функции, а не сценария, мне нужно остановить функции, следующие за текущей функцией, чтобы прекратить выполнение! - person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ; 12.01.2016
comment
Поэтому верните true/false из скрипта, и ваша основная функция решит, следует ли продолжать на основе возвращаемого значения. - person David Hoelzer; 12.01.2016
comment
@DavidHoelzer, да, это возможное решение. Мы можем сделать то же самое и в PHP, но все же у нас есть функция с именем exit(), которая упрощает нашу задачу. Я просто хотел знать, есть ли способ убить скрипт без ошибок в Javascript, если нет, мы все равно можем найти другие решения. - person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ; 12.01.2016

Попробуйте использовать jQuery.Callbacks() с параметром "stopOnFalse" ; jQuery.when(), jQuery .then()

var callbacks = $.Callbacks("stopOnFalse");

function a(msg) {
  var msg = msg || "a";
  console.log(msg);
  return msg
}
// stop callbacks here
function b() {
  var msg = false;
  console.log(msg)
  return msg
}
// `c` should not be called
function c() {
  var msg = new Error("def");
  console.log(msg)
  return msg
}

callbacks.add(a,b,c);

$.when(callbacks.fire())
.then(function(cb) {
  // `c` : `Error`
  if (cb.has(c)) {
    console.log("callbacks has `c`"
                , cb.has(c));
    // remove `c`
    cb.remove(c);
    console.log(cb.has(c));
    // empty `callbacks`
    cb.empty();
    // do other stuff
    cb.add(a);
    cb.fire("complete")
    
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

person guest271314    schedule 12.01.2016
comment
OMG, это выглядит более сложным, чем решение, предоставленное другим ответом. В любом случае, спасибо за попытку помочь, но я искал простое решение для остановки скрипта, а не обратные вызовы. - person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ; 12.01.2016
comment
Используйте решение, опубликованное @lc - person guest271314; 12.01.2016
comment
Да, это то, о чем я говорил. - person Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ; 12.01.2016