2013-03-08 3 views
0

Есть ли способ выхода из функции, вызвавшей выполняемую в настоящее время функцию?Как выйти из функции вызова в javascript

Примером может быть:

function doOneTwoThree(){ 

    doStuff(1, print); 

    doStuff(2, print); 

    doStuff(3, print); 

} 

function doStuff(parameter, aFunction){ 

    if(parameter === 2) { 
     //exit from doOneTwoThree 
    } 

    aFunction(parameter); 
} 

function print(something){ 

    console.log(something); 

} 

Другим вариантом будет возвращать ошибку в doStuff и проверьте, что ошибки в doOneTwoThree каждый раз, когда я называю doStuff. Но я не хотел бы иметь, чтобы проверить это каждый раз ...

+0

'возвратный;' мой дорогой :) – kidwon

+0

Вы всегда можете просто бросить яваскрипта ошибку нарочно. –

+0

'return' вернется к вызывающей функции, хотя? Или я не понимаю? –

ответ

2

Вы можете использовать throw и поймать бросок ошибки в doOneTwoThree:

function doStuff(parameter, aFunction) { 
    if (parameter === 2) { 
     throw "error"; 
    } 
} 

function doOneTwoThree() { 
    try { 
     doStuff(1, print); 
     doStuff(2, print); 
    } 
    catch (error) { /* handle here */ } 
} 

Однако, если вы не бросали фактической ошибка/исключение, вы должны не использовать это для управления потоком кода. Вместо этого вы должны проверить возвращаемое значение вызова doStuff, чтобы подтвердить, что вы можете продолжить. Если это звучит нечисто для вас, вы также можете сделать что-то вроде цепочек doStuff или вызвать их в цикле, из которого вы можете выйти из-за возвращаемого значения doStuff.

0

Попробуйте что-нибудь вроде этого? вернуть значение токена/магии? (Строка, как «еек», вероятно, плохой маркер, но это забавляло меня, используйте Int вместо)

function doOneTwoThree(){ 

    if (doStuff(1, print) === "eek") return; 

    doStuff(2, print); 

    doStuff(3, print); 

} 

function doStuff(parameter, aFunction){ 

    if(parameter === 2) { 
     return "eek"; 
    } 

    aFunction(parameter); 
} 
Смежные вопросы