2016-04-29 87 views
0

我在控制器中遇到問題,並且承諾。基本上我試圖根據我對我的承諾productData收到的回覆創建if語句。問題在於承諾內存在變量productData,但在它沒有之後 - 變爲空。是否因爲範圍?承諾範圍變量

這裏是我的代碼:

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

你需要處理productData獲取響應之後。把你如果條件承諾函數內部

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"); 

     } 
    }); 
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"); 

    } 
    });