如何在 angular 工厂和控制器之间使用承诺?
How to use promises between angular factories and controllers?
工厂:
function thingyFactoryFunction($http) {
return {
search: function(city, state) {
$http({
method: 'POST',
url: 'http://localhost:7500/search',
data: {city: city, state: state}
}).then(function successCallback(res) {
return res
})
}
}
}
这是我的控制器。我希望控制器简单地从上面的工厂获取响应,所以我可以设置 vm.thing 等于承诺响应。但是,我不断收到错误消息,如果我再看到一次我就会发疯:'TypeError: Cannot read 属性 'then' of undefined'.
function thingyIndexControllerFunction(thingyFactory) {
var vm = this;
vm.city;
vm.state;
vm.search = function() {
thingyFactory.search(vm.city, vm.state).then(function(res) {
console.log(res);
})
}
}
您的 factory/Service 搜索方法未返回任何内容。您试图访问 .then() 什么都没有(未定义)。 $http 本身 returns 一个 promise 对象。
尝试以下。
app.factory('thingyFactory', function($http) {
return {
search: function(city, state) {
//This will return promise object.
return $http({
method: 'POST',
url: 'http://localhost:7500/search',
data: {
city: city,
state: state
}
});
}
}
});
在控制器中,
app.controller('thingyIndexController', function($scope, thingyFactory) {
var vm = this;
vm.search = function() {
var promise = thingyFactory.search(vm.city, vm.state);
//after promise resolved then() method get called
promise.then(function(res) {
console.log(res);
})
}
});
工厂:
function thingyFactoryFunction($http) {
return {
search: function(city, state) {
$http({
method: 'POST',
url: 'http://localhost:7500/search',
data: {city: city, state: state}
}).then(function successCallback(res) {
return res
})
}
}
}
这是我的控制器。我希望控制器简单地从上面的工厂获取响应,所以我可以设置 vm.thing 等于承诺响应。但是,我不断收到错误消息,如果我再看到一次我就会发疯:'TypeError: Cannot read 属性 'then' of undefined'.
function thingyIndexControllerFunction(thingyFactory) {
var vm = this;
vm.city;
vm.state;
vm.search = function() {
thingyFactory.search(vm.city, vm.state).then(function(res) {
console.log(res);
})
}
}
您的 factory/Service 搜索方法未返回任何内容。您试图访问 .then() 什么都没有(未定义)。 $http 本身 returns 一个 promise 对象。 尝试以下。
app.factory('thingyFactory', function($http) {
return {
search: function(city, state) {
//This will return promise object.
return $http({
method: 'POST',
url: 'http://localhost:7500/search',
data: {
city: city,
state: state
}
});
}
}
});
在控制器中,
app.controller('thingyIndexController', function($scope, thingyFactory) {
var vm = this;
vm.search = function() {
var promise = thingyFactory.search(vm.city, vm.state);
//after promise resolved then() method get called
promise.then(function(res) {
console.log(res);
})
}
});