2017-06-25 15 views
0

私はこの機能を持っています。これは最上部にloadAll()と呼びます。 コントローラ内の呼び出しスコープ機能がゼロ値を返します

function loadAll() {  
     UniversalService.GetAll() 
      .then(function (a) { 
       $scope.all = a; 

      }); 
    } 

私は正しい情報を得るが、私はページネーションのための私のコントローラの後半でこれらの値を必要とするので、私はそれ// get current page of items $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1);

を呼び出すしかし、私は任意の値を取得dont't私のhtml内で使用

答えて

1

この約束が解決される前にこれを呼び出すことができますか? これを解決済みの約束に追加することがあなたの解決策になるかもしれません。好き

function loadAll(callback) {  
      UniversalService.GetAll() 
       .then(function (a) { 
        $scope.all = a; 
        if (callback) { 
         callback(); 
        } 
       }); 
     } 

とそれを呼び出す:

loadAll(function() { 
    $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1); 
}); 
+0

、それは他の方法での約束を解決することは可能ですか?この行は別の関数で使用されているので、loadAll()関数で '$ scope.items = $ scope.all.slice(vm.pager.startIndex、vm.pager.endIndex + 1);を呼び出すことはできません。 – user122222

+0

はい可能ですが、オプションのコールバックはなぜですか?私は答えを編集しました。 – Fetrarij

+1

約束事でコールバックパターンを推奨しません。 [なぜプロミスのコールバックが ''アンチパターンであるのか](https://stackoverflow.com/questions/35660881/why-are-callbacks-from-promise-then-methods-an-anti-pattern)を参照してください。 。 – georgeawg

1

Is it possible to solve promise in other way? I can't call $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1); in loadAll() function because this line is used in another function

戻りUniversalService.GetAll()からの約束:

function loadAll() {  
    var promise = UniversalService.GetAll(); 
    promise.then(function (all) { 
     $scope.all = all; 
    }); 
    //RETURN promise 
    return promise; 
} 

function loadAll() {  
     UniversalService.GetAll() 
      .then(function (a) { 
       $scope.all = a; 
       $scope.items = $scope.all.slice(vm.pager.startIndex, vm.pager.endIndex + 1); 
      }); 
    } 

それとも、この機能を変更する文句を言わない場合はコールバックを使用

次に別の関数にその約束を使用します。

var loadAllPromise = loadAll(); 

function another(loadAllPromise) { 
    loadAllPromise.then(function(all) { 
     $scope.items = all.slice(vm.pager.startIndex, vm.pager.endIndex + 1); 
    }); 
} 
+0

私は 'TypeError:プロパティを読み取ることができません 'というエラーを受け取りました。'未定義です。 '問題がある可能性がありますか? – user122222

+1

これは、通常、[return文]がないことを意味します(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return)。 – georgeawg

+1

または、関数呼び出しで引数が欠落しています。 – georgeawg

関連する問題