簡體   English   中英

Angular承諾多次

[英]Angular promise multiple times

我正在嘗試復制像couchDB這樣的系統。 我的后端是Parse服務器,我的前端是Ionic(1)

我想要實現的是用localstorage來固定我的應用程序。

目前:GetUserAds

- >有localstorage嗎?

- >是的

--->返回localstorage

- >不

--->獲取數據庫調用

---->返回並放置本地

但我真正想要的是本地返回在后台獲取數據庫並返回該數據,如果它已更改

這是因為我的應用程序有很多用戶並且變化很大。

我可以這樣做嗎?

getUserAds(user).then(function(data) {
//Local data
}).then(function(dataDB) {
//Database updated data
})

您可以使用角度承諾提供的notify回調:

function UserService($timeout, $q) {
    var users = ["user1", "user2"]; //localStorage.getItem('users');
    function get() {
    var deferred = $q.defer();
    //call your backend here $http.get('....')
    $timeout(function() {
      //if(remoteUsers !== users) {
                deferred.resolve({local: false, users: users.concat('user3')});
      //}

    }, 3000);
    $timeout(function() {
    if(users) {
        deferred.notify({local: true, users: users});
    }

    }, 100)

    return deferred.promise;
  }

    return {
    get: get
  };
}

並在你的控制器

function MyCtrl($scope, $users) {
    $scope.name = 'Superhero';
    $scope.myUsers = [];

    $users.get()
        .then(setUsers, null, setUsers);

     function setUsers(users) {
        $scope.myUsers = users;
      }
}

在這里你可以看到一個小小的jsfiddle: http//jsfiddle.net/Lvc0u55v/1596/

如果您使用Angular API中的此服務,您可以這樣做: Angular Promises

我就是這樣做的:

getUserAds(user).then(function(response) {
    // useMyData
});

function getUserAds {
    if( thereIsLocalData ) {
        return getLocalData(); // this returns a $q promise
    } else {
        return getDataDB() // Here I'm returning an $http Promise
    }
}

function getDataDB (params)  {
    return $http.get(host, params, {}); // I'm returning the $http Promise!
}

function getLocalData (params) {
    return $q(function(resolve, reject) {
        resolve(myLocalData);
  }); // return the $q promise!
}

這樣,您可以像在線通信一樣使用本地通信,並且可以簡化邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM