【发布时间】:2014-05-22 23:52:16
【问题描述】:
我正在尝试在我的应用中使用 Angular Promise API。我有点困惑。我在下面的代码中创建了一个工厂
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'”
但是当我像这样使用'new'关键字时
var getData = function () {
(new transport()).$getAll({svcUrl:"//BasicSettings"})
.then(function (data) {
$scope.DataSource = data.value[0];
console.log($scope.DataSource.SystemName);
});
}();
它有效。
我知道构造函数和普通函数的区别。但我不明白为什么 Promise API 只在第二种情况下有效。
谁能帮我理解它是如何工作的?
【问题讨论】:
-
你试过
console.log(transport()); console.log(new transport());吗?看起来transport只是一个构造函数,可能不会作为函数调用。 -
这不是“promise api”有效与否,它只是对象创建失败(或失败)。并且访问非对象(
undefined)上的属性(方法)注定会失败,无论其预期值是多少。 -
你能提供一个关于你的问题的 plnkr 演示吗? (将有助于查看更多周边代码)
标签: javascript angularjs ngresource