我发布了AngularJS http.post,将response.data放入successCallback函数的范围内。 console.log写入范围数据但我无法访问另一个函数中的范围数据。
Init调用请求函数。
$scope.init = function(group_year_id,year)
{
accessScopeFunction();
foo();
};
这是被调用的函数
function accessScopeFunction() {
$http({
method: 'POST',
url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
}).then(function successCallback(response) {
$scope.getDatabaseName = response.data.event_db;
console.log($scope.getDatabaseName);
}, function errorCallback(response) {
return 'Fault';
});
};
我想将$ scope.getDatabaseName传递给另一个函数
function foo() {
$http({
method: 'POST',
url: 'http://localhost/sjb/',
data: {'databasename':$scope.getDatabaseName}
}).then(function successCallback(response) {
}, function errorCallback(response) {
});
};
我阅读了很多关于承诺,AngularJS文档等的内容,但我找不到适合我的解决方案。
答案 0 :(得分:1)
嗯,很容易。 $http
会返回promise
。因此,使用这个不错的附加功能来创建自己的promises
。
您的代码目前发生的情况如下:
accessScopeFunction();
foo();
它们是相互调用的,因此accessScopeFunction()
仍在处理并等待解决。 foo()
也被称为。所以你需要做的就是等待accessScopeFunction()
完成。
您可以使用promise
正在返回的$http
来电来执行此操作:
function accessScopeFunction()
{
var promise = $http(
{
method: 'POST',
url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
}
).then(
function successCallback(response)
{
$scope.getDatabaseName = response.data.event_db;
console.log($scope.getDatabaseName);
},
function errorCallback(response)
{
return 'Fault';
}
);
// Return the promise
return promise;
};
对foo()
function foo()
{
var promise = $http({
method: 'POST',
url: 'http://localhost/sjb/',
data: {
'databasename': $scope.getDatabaseName
}
}
).then(
function successCallback(response)
{
}, function errorCallback(response)
{
}
);
return promise;
};
然后致电accessScopeFunction()
并使用then()
回调来致电foo()
$scope.init = function (group_year_id, year)
{
accessScopeFunction().then(
function ()
{
foo();
}
);
};
foo()
可以使用相同的方式。
foo().then(function () { ... })
答案 1 :(得分:0)
您必须链接您的承诺,以便您可以访问第二个函数中的第一个结果:
$scope.init = function(group_year_id,year)
{
accessScopeFunction().then(foo(databaseName))
};
function accessScopeFunction() {
return $http({
method: 'POST',
url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
}).then(function successCallback(response) {
$scope.getDatabaseName = response.data.event_db;
return $scope.getDatabaseName;
}, function errorCallback(response) {
return 'Fault';
});
};
function foo() {
$http({
method: 'POST',
url: 'http://localhost/sjb/',
data: {'databasename':$scope.getDatabaseName}
}).then(function successCallback(response) {
}, function errorCallback(response) {
});
};