2016-12-28 8 views
0

私は互いに待ち合わせる2つのネストされた関数が実際に間違った順序で実際に実行される遅延使用の問題に直面しています。 私は戻って約束をミックスする場所を見つけられません。jQueryの遅れに関する問題

ここで私は達成しようとしています。モバイルCordovaアプリでは、ユーザーがゲームビューに入ると、WebSqlで質問をダウンロードする機能があり、1つの質問を取得してから、スライダー機能でコンテンツを読み込みます。 .done()イベントでgetQuestion関数をネストしました。

router.addRoute('game', function() { 
     'use strict'; 
     //Reload Question List when User enter the Game view. 
     questionService.initialize().done(
     //Now we got question, initialize the Game View 
     questionService.getQuestion().done(
      function (data) { 
      console.log(data); 
      slider.slidePage(new GameView(data).render().$el); 
      }) 
    ); 

ここでは、両方の機能で$.Deferred()を使用する方法を示します。最初に私は$.Deferred()と宣言し、関数の最後に私は約束を返します。

しかし、私のgetQuestion()は、以下のコードでは、開始前にinitialize()関数が終了するのを待たずにいます。

私は約束を折り返しましたか?

var getQuestions = function(param) { 
    var deferred = $.Deferred(); 
    param = param; 
    $.ajax({ 
     type: 'POST', 
     url: 'myserver', 
     data: { 
      region: uRegion 
     }, 
     success: function(value, status) { 
      //do something with value 
      this.db = window.openDatabase('database details'); 
      this.db.transaction(function(tx) { 
       storeQuestion(tx); 
      }, function(error) { 
       deferred.reject('Transaction error: ' + error); 
      }, function() { 
       //Transaction success 
       deferred.resolve(); 
      }); 
     }, 
     error: function(textStatus, exception) {} 
    }); 
    return deferred.promise(); 
}; 

答えて

0

成功コールバックハンドラを渡していません。現在の実装では、すぐにgetQuestion()が呼び出されます。

使用無名関数、その細かい

//Reload Question List when User enter the Game view. 
questionService.initialize().done(function(){ 
    //Now we got question, initialize the Game View 
    questionService.getQuestion().done(
     function (data) { 
     console.log(data); 
     slider.slidePage(new GameView(data).render().$el); 
     }) 
}); 
休みます