2016-08-31 11 views
0

$.when()のコードが最初に終了するまでコールバック関数を強制的に待機させるには、$.when(some function).then(some function)をjQueryで使用しようとしています。

ここは私の機能です。コンソールで

function activateFirstTab(callback) { 

    console.log('started activateFirstTab'); 
    console.log('Total groups found: '+ $('.functionParameterGroup').length); 

    $.when(function() { 

     $('.functionParameterGroup').each(function() { 
      //Activate the first tab "which is the default" 

      var first = $(this).find('ul > li:first'); 

      first.addClass('active'); 

      var contentId = first.data('contentid'); 

      $(contentId).addClass('in active'); 

      console.log('finished when logic in activateFirstTab'); 

     }); 

    }).then(function() { 

     // Make sure the callback is a function​ 
     if (typeof callback === "function") { 
      // Call it, since we have confirmed it is callable​ 
      callback(); 
     } 

    }); 


    console.log('finished activateFirstTab'); 

} 

私は、取得するには、次のメッセージ

started activateFirstTab 
Total groups found: 2 
finished activateFirstTab 

が、私は、私はこの

started activateFirstTab 
Total groups found: 2 
finished when logic in activateFirstTab 
finished when logic in activateFirstTab 
finished activateFirstTab 
する出力を期待してい $.when()

内のブロックからのメッセージを取得することはありません

$.when()のコードがなぜexeでないのですかcuted?

どうすれば実行できますか?私は何の間違いをしていますか?

+1

に渡すことができますが、 '$繰延オブジェクトで呼び出され.when'ないでしょうか? https://api.jquery.com/jQuery.Deferred/ – noahnu

+3

まず第一に、あなたのコードは同期的であり、このすべてを必要としません。 –

+0

@YuryTarabankoあなたが '$ .when()。then()'を取り除くと、私のコードはコールバックを呼び出す前に終了するまで待つでしょうか? – Jaylen

答えて

1

$.when()内の関数を呼び出さず、$.when()に渡された匿名関数は約束を返さないことにも注意してください。パラメータのいずれかのタイプが$.when()

function fn(callback) { 
 
    $.when(function dfd(callback) { 
 
     $.each([1, 2, 3], function(i, value) { 
 
     console.log(value) 
 
     }); 
 
     return "dfd complete" 
 
    }() /* invoke `dfd` function */) 
 
    .then(function(data) { 
 
     // Make sure the callback is a function​ 
 
     if (typeof callback === "function") { 
 
     // Call it, since we have confirmed it is callable​ 
 
     callback(data); 
 
     } 
 
    }) 
 
} 
 

 
fn(function(args) { 
 
    alert(args) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

また、 '$ .when()' – Aaron

+0

の中にプロミスと互換性のあるオブジェクトはありません。私のforeachメソッドは$ .when()の中にあります。あなたは私の機能を呼び出さないと$を言っていますか? – Jaylen

+0

@Jaylenはい、 '$ .when()'は関数を呼び出さない – guest271314

関連する問題