Я пытаюсь использовать API обещаний Angular в своем приложении. И я был немного сбит с толку. Я создал фабрику, как в коде ниже
factory('transport', function ($resource) {
var baseUrl = "http://aw353/WebServer/odata/Payments";
return $resource("", {},
{
'getAll': { method: "GET",params: {svcUrl:"@svcUrl"}, url: baseUrl + ":svcUrl" },
'save': { method: "POST", params: {svcUrl:"@svcUrl"}, url: baseUrl+ "(:svcUrl)" },
'update': { method: 'PUT', params: {svcUrl:"@svcUrl", key: "@key" }, url: baseUrl+ "(:svcUrl)" + "(:key)"},
'query': { method: 'GET', params: {svcUrl:"@svcUrl", key: "@key" }, url: baseUrl +"(:svcUrl)" + "(:key)"},
'remove': { method: 'DELETE', params: {svcUrl:"@svcUrl", key: "@key" }, url: baseUrl + "(:svcUrl)" + "(:key)"}
});
});
Я использую эту фабрику в контроллере, и когда я реализую такую функцию
var getData = function () {
(transport()).$getAll({svcUrl:"//BasicSettings"})
.then(function (data) {
$scope.DataSource = data.value[0];
console.log($scope.DataSource.SystemName);
});
}();
происходит сбой, и я получаю сообщение об ошибке "Невозможно прочитать свойство $getAll неопределенного"
Но когда я использую ключевое слово "новое", подобное этому
var getData = function () {
(new transport()).$getAll({svcUrl:"//BasicSettings"})
.then(function (data) {
$scope.DataSource = data.value[0];
console.log($scope.DataSource.SystemName);
});
}();
оно работает.
Я знаю разницу между функцией-конструктором и обычной функцией. Но я не понимаю, почему обещание API работает только во втором случае.
Может ли кто-нибудь помочь мне понять, как это работает?
console.log(transport()); console.log(new transport());
? Похоже,transport
— это просто конструктор, который нельзя вызывать как функцию. - person Bergi   schedule 22.05.2014undefined
) обречен на неудачу, независимо от того, каково его ожидаемое значение. - person Bergi   schedule 22.05.2014