AngularJS - 使用承诺中声明的变量
AngularJS - use variable declared in a promise
我正在尝试在一个函数内调用服务,然后使用来自该服务的响应数据,使用 .then
,但我无法return 从该函数
var status;
var getStatus = function(data,$scope){
registrationService.registration(data,$scope)
.then(function (response) {
return status = response.status;
console.log("Status1: " + status);
});
}
status = getStatus(data,$scope);
console.log("Status2: " + status);
当我将服务调用移到函数外时一切正常
registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
但在这种情况下,我无法访问回调外部的 status
变量,我需要重新使用它来检查状态。
两件事。一、作业returnundefined
.
所以,
return status = response.status;
return未定义。
二、一个return语句会停止一个函数块的执行。
下面的调用不是 console.logging,因为 return 阻止它到达 console.log。
registrationService.registration(data,$scope)
.then(function (response) {
return status = response.status;
console.log("Status1: " + status);
});
这个调用是(你说的是工作,我假设这意味着你得到 console.log)是工作不是因为你把它从函数中拉出来,而是因为你删除了 return 语句。
registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
更详细的更新:
getStatus
return没什么所以它 return 未定义。这意味着状态在您的最终控制台日志之前被设置为未定义。
status = getStatus(data,$scope);
如果 registrationService.registration(data,$scope)
是异步的,那么您将不得不等到它在 console.logging 之前解决。当前,您 console.log 在执行 getStatus
后立即同步
更新 2
var status;
var getStatus = function(data,$scope){
return registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
}
getStatus(data,$scope)
.then(function () {
console.log("Status2: " + status);
})
更新 3
对于下面评论中的后续问题,你真的应该像这样重构它:
function getStatus (data,$scope){
return registrationService.registration(data,$scope)
.then(function (response) {
if (response.status === "pending") {
return getStatus(data, $scope)
} else if (response.status === "accepted") {
// return something else
} else {
// return something else
}
console.log("Status1: " + status);
});
}
getStatus(data, $scope)
.then(function (data) {
// do whatever you want
});
我正在尝试在一个函数内调用服务,然后使用来自该服务的响应数据,使用 .then
,但我无法return 从该函数
var status;
var getStatus = function(data,$scope){
registrationService.registration(data,$scope)
.then(function (response) {
return status = response.status;
console.log("Status1: " + status);
});
}
status = getStatus(data,$scope);
console.log("Status2: " + status);
当我将服务调用移到函数外时一切正常
registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
但在这种情况下,我无法访问回调外部的 status
变量,我需要重新使用它来检查状态。
两件事。一、作业returnundefined
.
所以,
return status = response.status;
return未定义。
二、一个return语句会停止一个函数块的执行。
下面的调用不是 console.logging,因为 return 阻止它到达 console.log。
registrationService.registration(data,$scope)
.then(function (response) {
return status = response.status;
console.log("Status1: " + status);
});
这个调用是(你说的是工作,我假设这意味着你得到 console.log)是工作不是因为你把它从函数中拉出来,而是因为你删除了 return 语句。
registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
更详细的更新:
getStatus
return没什么所以它 return 未定义。这意味着状态在您的最终控制台日志之前被设置为未定义。
status = getStatus(data,$scope);
如果 registrationService.registration(data,$scope)
是异步的,那么您将不得不等到它在 console.logging 之前解决。当前,您 console.log 在执行 getStatus
更新 2
var status;
var getStatus = function(data,$scope){
return registrationService.registration(data,$scope)
.then(function (response) {
status = response.status;
console.log("Status1: " + status);
});
}
getStatus(data,$scope)
.then(function () {
console.log("Status2: " + status);
})
更新 3
对于下面评论中的后续问题,你真的应该像这样重构它:
function getStatus (data,$scope){
return registrationService.registration(data,$scope)
.then(function (response) {
if (response.status === "pending") {
return getStatus(data, $scope)
} else if (response.status === "accepted") {
// return something else
} else {
// return something else
}
console.log("Status1: " + status);
});
}
getStatus(data, $scope)
.then(function (data) {
// do whatever you want
});