2013-03-20 28 views
37

Tôi đang sử dụng AngularJS 1.1.3 để sử dụng tài nguyên $ mới với các lời hứa ...

Làm cách nào để nhận được cuộc gọi lại từ đó? tôi đã cố gắng giống như cách tôi đã làm với $ http:

$resource.get('...'). 
    success(function(data, status) { 
     alert(data); 
    }). 
    error(function(data, status) { 
     alert((status); 
    }); 

Nhưng không có 'thành công' không 'lỗi' chức năng ...

Tôi cũng đã cố gắng rằng:

$resource.get({ id: 10 },function (data) { 
    console.log('success, got data: ', data); 
}, function (err) { 
    alert('request failed'); 
}); 

Điều đó luôn in "thành công, nhận dữ liệu" ngay cả khi lợi nhuận là ...

Bất kỳ ý tưởng nào?

Cảm ơn

+0

Sử dụng '$ then', xem http://code.angularjs.org/1.1.3/docs/api/ngResource.$resource. – Tristan

+0

Bạn có thể chỉ cho tôi cách thực hiện không? Bởi vì tôi nghĩ rằng tôi sẽ có kết quả tương tự như mẫu thứ hai của tôi ... – Paul

+0

API này đang thay đổi, vì vậy tôi sẽ không dựa vào nó: https://github.com/angular/angular.js/pull/2060 – Tristan

Trả lời

49

Tính đến một PR on angulars resource và góc 1.2, góc cạnh sẽ được chuyển sang một cách đơn giản thực hiện thành công/kiểm tra lỗi . Thay vì gắn callbacks hoặc một phương thức $ thì cả Resource.get (..) và instance.get() sẽ hỗ trợ phương thức $ promise, nó tự động trả về một lời hứa cho cả hai.

Tính góc 1.2 tính năng $ hứa sẽ đi trực tiếp: $promise changes

Thay đổi "nhận được" yêu cầu của bạn là một cái gì đó dọc theo những dòng (ví dụ ban đầu là trên angularjs.org trang bìa):

factory('Project', function($resource) { 
    var Project = $resource('https://api.mongolab.com/api/1/databases' + 
     '/youraccount/collections/projects/:id', 
     { apiKey: 'yourAPIKey' }, { 
     update: { method: 'PUT' } 
     } 
); 

    Project.prototype.update = function(cb) { 
    return Project.update({id: this._id.$oid}) 
     .$promise.then(
     //success 
     function(value){/*Do something with value*/}, 
     //error 
     function(error){/*Do something with error*/} 
    ) 
    }; 

    Project.prototype.destroy = function(cb) { 
    return Project.remove({id: this._id.$oid}) 
     .$promise.then(
     //success 
     function(value){/*Do something with value*/}, 
     //error 
     function(error){/*Do something with error*/} 
    ) 
    }; 

    return Project; 
}); 

một nơi nào đó khác trong một bộ điều khiển bạn có thể nhanh chóng một nguồn tài nguyên "Dự án" trường hợp mà bạn có thể sử dụng cùng một giao diện cho những thành công và các lỗi:

var myProject = new Project(); 

myProject.$get({id: 123}). 
    .$promise.then(
     //success 
     function(value){/*Do something with value*/}, 
     //error 
     function(error){/*Do something with error*/} 
    ) 
+1

Tôi đang sử dụng 1.2.1 trong [this fiddle] (http://jsfiddle.net/sonicblis/5tcQa/3/), nhưng tôi nhận được một lỗi chỉ ra $ lời hứa là không xác định. 1.2.1 phải phù hợp với chi tiết của câu trả lời này, đúng không? – sonicblis

+0

Chỉ cần bắt đầu một dự án mới sử dụng tài nguyên Odata và anguarl. Chính xác những gì tôi đang tìm kiếm với một ví dụ tốt đẹp, cảm ơn bạn. –

29
var MyResource = $resource("/my-end-point/:action", {}, { 
    getSomeStuff: { method:"GET", params: { action:"get-some-stuff" }, isArray: true }, 
    getSingleThing: { method:"GET", params: { action:"get-single-thing" }, isArray: false } 
}); 

function MyController(MyResource) { 
    var itemList = MyResource.getSomeStuff({}, function success() {}, function err() {}); 
    // will call: /my-end-point/get-some-stuff 
    // will be array. each object is resource's instance 
    var item = MyResource.getSingleThing({id:123}, function success() {}, function err() {}); 
    // will call: /my-end-point/get-single-thing?id=123 
    // will be object. an instance of resource 
} 

Ngoài ra kiểm tra ví dụ trong tài liệu: ngResource

+0

A lý do chính đáng * không * để sử dụng điều này là một lỗi trong hàm thành công sẽ không bị bắt gặp bởi hàm lỗi thứ hai, vì nó thường làm với lời hứa. Ví dụ: '' 'User.getSubscriptions(). $ Promise.then ((res) => { doesNotExist123(); alert ('successed') }). Catch ((e) => { alert ('không thành công'); console.log (e); }) '' ' Theo lời hứa xây dựng, không thành công sẽ cảnh báo, như tôi tin. –

Các vấn đề liên quan