我的控制器上有这个功能:
// Get a specific Parte
partesc.getParte = function (id) {
var url = endpointApiURL.url + "/fabricante/" + id;
$scope.PartesPromise = $http.get(url)
.then(function (response) {
partesc.parte= response.data;
})
.catch(function (error) {
console.log(error);
if (error.status == '412') {
console.log('Error obteniendo datos: ' + error.data.error);
}
});
}
我有第二个功能:
partesc.openEdit = function(id) {
partesc.getParte(id);
console.log(partesc.parte); }
我从前端的按钮调用openEdit函数。所以console.log部分打印undefined。我认为这不是等待调用函数getParte(id)的响应。
如何让等待函数的响应来打印结果?我是以错误的方式做这件事的?
更新1
console.log仅供参考。我需要使用返回另一个函数(getParte)的数据(openEdit)
解
我找到了解决方案,这要归功于我在这里接受的答案。
// Get a specific Parte
partesc.getParte = function (id) {
var url = endpointApiURL.url + "/fabricante/" + id;
return $http.get(url)
.then(function (response) {
partesc.parte= response.data;
})
.catch(function (error) {
console.log(error);
if (error.status == '412') {
console.log('Error obteniendo datos: ' + error.data.error);
}
});
}
partesc.openEdit = function(id) {
$scope.PartesPromise = partesc.getParte(id)
.then(function() {
console.log(partesc.parte);
});
}
由于
答案 0 :(得分:1)
你可以使用诺言:
partesc.getParte = function (id) {
var url = endpointApiURL.url + "/fabricante/" + id;
return $scope.PartesPromise = $http.get(url)
.then(function (response) {
partesc.parte= response.data;
})
.catch(function (error) {
console.log(error);
if (error.status == '412') {
console.log('Error obteniendo datos: ' + error.data.error);
}
});
}
这将返回承诺,因此您可以在控制器中等待解决或拒绝,如下所示:
partesc.openEdit = function(id) {
partesc.getParte(id).then(function() {
console.log(partesc.parte);
});
}
答案 1 :(得分:1)
然后,如果你能回复承诺:
partesc.getParte = function (id) {
var url = endpointApiURL.url + "/fabricante/" + id;
return $http.get(url);
};
partesc.openEdit = function(id) {
partesc.getParte(id).then(function(response){
// stuff you want to do
});
};
答案 2 :(得分:0)
然后在函数中使用console.log。
partesc.getParte = function (id) {
var url = endpointApiURL.url + "/fabricante/" + id;
$scope.PartesPromise = $http.get(url)
.then(function (response) {
partesc.parte= response.data;
console.log(partesc.parte);
})
.catch(function (error) {
console.log(error);
if (error.status == '412') {
console.log('Error obteniendo datos: ' + error.data.error);
}
});
}
因为这是异步调用,并且在函数调用之后执行下一行代码,直到那时没有响应,因此您在函数外部获得未定义的值。
答案 3 :(得分:0)
您可以使用$ q服务来解决问题
// 在控制器中注入$ q
partesc.getParte = function (id) {
var deferred = $q.defer(),
url = endpointApiURL.url + "/fabricante/" + id;
$scope.PartesPromise = $http.get(url)
.then(function (response) {
partesc.parte= response.data;
deferred.resolve(response.data);
})
.catch(function (error) {
console.log(error);
if (error.status == '412') {
console.log('Error obteniendo datos: ' + error.data.error);
}
deferred.reject(error);
});
return deferred.promise;
}
并使用上述功能如下:
partesc.openEdit = function(id) {
partesc.getParte(id).then(function(response){
partesc.parte = response
console.log(partesc.parte);
})
.catch(function(error){
});
}
答案 4 :(得分:0)
您可以返回承诺,并从函数中使用它,如下所示:
angular.module("myApp",[])
.controller('ctr1', function(sample){
sample.sampleFn().then(function(data){
console.log(data);
})
})
.factory('sample', function($http){
return {
sampleFn : sampleFn
}
function sampleFn(){
return $http.get('response.json').then(function(response){
return response.data;
}, function(){
$q.reject("Failed");
})
}
})