前提・実現したいこと
該当のソースコードで、「getB()」だけ「if」の中に入れたいと思っています。
このような分岐が目的です↓
if( double_actions === true ){ getB() }
該当のソースコード
jQuery
1get( double_actions ); // double_actions にはAとB2つとも実行するか否かのtruthyが入る 2 3function get( double_actions ) { 4 $.when( 5 getA(), 6 getB() // double_actions === true の場合だけ実行したい 7 ) 8 .then( function( A, B ) { 9 console.log( 'A=' + A ); 10 console.log( 'B=' + B ); 11 }) 12} 13 14function getA(){ 15 var deferred = new $.Deferred; 16 setTimeout( function() { 17 deferred.resolve( 'データA' ); 18 }, 500); 19 return deferred.promise(); 20} 21 22function getB(){ 23 var deferred = new $.Deferred; 24 setTimeout( function() { 25 deferred.resolve( 'データB' ); 26 }, 1000); 27 return deferred.promise(); 28} 29
試したこと
まず試したのがこうですが、「SyntaxError: expected expression, got keyword 'if'」というエラーで「if」が使えないようでした。
jQuery
1function get( double_actions ) { 2 $.when( 3 getA(), 4 if( double_actions === true ){ getB() } // エラー 5 ) 6 .then( function( A, B ) { 7 console.log( 'A=' + A ); 8 console.log( 'B=' + B ); 9 }) 10}
そして「if」を使う方法を調べているうちに以下の書き方を見つけました。しかしこれも同じエラーで「if」は使えないようでした。
jQeury
1function get( double_actions ) { 2 $.Deferred().resolve().then( function() { // ここを変更 3 return getA(), 4 if( double_actions === true ){ getB() } // エラー 5 }) 6 .then( function( A, B ) { 7 console.log( 'A=' + A ); 8 console.log( 'B=' + B ); 9 }) 10}
最終的に無理やりな気がしますがなんとか解決できたのが以下です。
これは「getB()」を実行しないのではなく、実行するけどすぐに「return」するという方法なのですが、かっこよさとしてはどうなのかなという気が致します。
jQuery
1get( true ); 2 3function get( double_actions ) { 4 $.when( 5 getA(), 6 getB( double_actions ) // ifはここではなく、この関数の中で判定する 7 ) 8 .then( function( A, B ) { 9 console.log( 'A=' + A ); 10 console.log( 'B=' + B ); 11 }) 12} 13 14function getA(){ 15 var deferred = new $.Deferred; 16 setTimeout( function() { 17 deferred.resolve( 'データA' ); 18 }, 500); 19 return deferred.promise(); 20} 21 22function getB( double_actions ){ 23 if( !double_actions ) return; // ここで判定する 24 var deferred = new $.Deferred; 25 setTimeout( function() { 26 deferred.resolve( 'データB' ); 27 }, 1000); 28 return deferred.promise(); 29}
上のコードでできたのならそれでいいだろという話かもしれませんが、もし「$.when」の中で「if」を使う方法があれば後学のためにご教授願えればと思い、ご質問を投稿させて頂きました。
すみませんがどなたかお知恵を拝借できませんでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/16 10:02