我的控制器中有一个承诺存在问题。基本上我正在尝试根据我对productData
的承诺收到的响应创建一个if语句。问题是变量productData
存在于promise中,但在它没有之后 - 它变为null。是因为范围?
这是我的代码:
var productData = null;
ProductService
.queryByGroup(selectedGroup.id)
.then(function(response) {
productData = response.data;
});
if (productData.hasOwnProperty('conditions') == false) {
// Send a request to the server asking for the medicine ids of the selected group
Meds
.getAllProductsById(selectedGroup.id)
.then(function(response) {
//SOME CODE logic
}, function(response) {
$log.debug('Unable to load data');
$log.debug(response.debug);
});
} else {
console.log("call modal");
}
答案 0 :(得分:1)
您的代码格式不正确但我的猜测是您的if
语句正在并行中执行到异步$resource
调用。您的承诺尚未确定,因此导致错误的productData
中没有数据。
修复是根据promise回调中的productData
移动所有内容,因此当它被解析时,它将被填充。像这样:
var productData = null;
ProductService
.queryByGroup(selectedGroup.id)
.then(function(response) {
productData = response.data;
if (!productData.conditions) {
// Send a request to the server asking for the medicine ids of the selected group
Meds
.getAllProductsById(selectedGroup.id)
.then(function(response) {
//SOME CODE logic
}, function(response) {
$log.debug('Unable to load data');
$log.debug(response.debug);
});
} else {
console.log("call modal");
}
});
答案 1 :(得分:0)
获得回复后,您需要处理 productData 。将你的if条件放在promise函数中
ProductService
.queryByGroup(selectedGroup.id)
.then(function (response){
productData = response.data;
if(productData.hasOwnProperty('conditions') == false){
// Send a request to the server asking for the medicine ids of the selected group
Meds
.getAllProductsById(selectedGroup.id)
.then(function (response) {
//SOME CODE logic
}, function (response) {
$log.debug('Unable to load data');
$log.debug(response.debug);
});
}else{
console.log("call modal");
}
});