Friday, 15 January 2010

angularJS: I need to make an $http request and resolve it in the same function -



angularJS: I need to make an $http request and resolve it in the same function -

in app.js, resolve ui-router thusly:

.state('edit', { url: '/edit/:id', templateurl: '/ang/views/edit/editapp.html', resolve: { loan: function ($q, $stateparams, loans) { var p = $q.defer(); loans.getloan($stateparams.id) .then(function (res) { p.resolve(res); }); homecoming p.promise; } }, controller: 'editappcontroller' })

i have loans mill promise resolved , in editappcontroller, send object mill farther processing using

$scope.loan = loans.makeloan(loan.data.data);

here pertinent part of loans factory:

.factory('loans', function($http){ homecoming { getloan: function(id){ homecoming $http.get('/api/loans/' + id); }, makeloan: function(o){ o.jwg = 'this added in create loan'; homecoming o; };

in makeloan() method, did prove me work. need create $http phone call api additional info , need resolve phone call within same method (makeloan()) can add together calculations object within function before giving controller view.

can explain me how can this?

if need create 2 calls api , want retrieve promise of lastly call, can chain promises. homecoming lastly promise:

makeloan: function(){ homecoming $http.get('/api/loans/whatever').then(function(data){ homecoming $http.get('/api/loans/whatever2/'+data.id); }); }

also, if may: doing here:

.state('edit', { url: '/edit/:id', templateurl: '/ang/views/edit/editapp.html', resolve: { loan: function ($q, $stateparams, loans) { var p = $q.defer(); loans.getloan($stateparams.id) .then(function (res) {a p.resolve(res); }); homecoming p.promise; } }, controller: 'editappcontroller' })

it's anti-pattern known deferred anti-paattern, improve way be:

.state('edit', { url: '/edit/:id', templateurl: '/ang/views/edit/editapp.html', resolve: { loan: function ($stateparams, loans) { homecoming loans.getloan($stateparams.id); } }, controller: 'editappcontroller' })

angularjs

No comments:

Post a Comment