0

現在実行中の関数を呼び出した関数を終了する方法はありますか?

例は次のとおりです。

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);

}

もう 1 つのオプションは、 でエラーを返し、を呼び出すたびdoStuffに でそのエラーをチェックすることです。毎回チェックしなくていいのに…。doOneTwoThreedoStuff

4

2 に答える 2

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

于 2013-03-08T15:28:29.207 に答える
0

このようなことを試してみませんか?トークン/マジック値を返しますか? (「eek」のような文字列はおそらく悪いトークンですが、面白かったので、代わりに 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);
}
于 2013-03-08T15:29:45.070 に答える