2016-04-29 3 views
0

У меня проблема с контроллером с обещанием. В основном я пытаюсь создать оператор if, основанный на ответе, который я получаю от своего обещания до productData. Проблема заключается в том, что переменная productData существует внутри обещания, но после ее отсутствия она получает значение 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

вам нужно обрабатывать ИзделиеТехнический после ответа ГЭТ. Положите если условие внутри функции посыла

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, что вызывает ошибку.

Исправление состоит в том, чтобы переместить все в зависимости от 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"); 

    } 
    }); 
Смежные вопросы