0

Using JavaScript and AngularJS, I have a controller function looking to set a bool based on the return of a service call, which awaits the return of an API call. How do I write the controller function to wait for the API response?

Controller...

    var someBoolValue = false;

function firstCheck() {
 // function checks other things
 
 if (someCheck) {
 
 // how do I set someBoolValue to await the response, this code did NOT work

 SomeService.CheckforSomething(data, moreData).then(function (response) {
     someBoolValue = response;
 });
 
}

Service...

function CheckforSomething(data, moreData) {
    var anImportantNumber = null;
    var anotherNumber = 456;
    // function does other things
    
    anImportantNumber = 123;
    
    if (someCondition) {
        ApiService.GetMyData()
        .then(function (data) {
            anImportantNumber = data.ThisValue.WRT;
        }
    }
    
    return (anImportantNumber != anotherNumber);
}

API Service...

function GetMyData() {
    uri = 12345;
    $http.get(uri)
    .then(function (response) {
        dererred.resolve(response.data)
    }
    
    return deferred.promise;
}
TMR
  • 87
  • 2
  • 13
  • right now you are setting `someBoolValue` to `anImportNumber` so it wont be a boolean. – about14sheep Dec 16 '21 at 00:35
  • Yes, my mistake in trying to keep it simple. I have updated the question. – TMR Dec 16 '21 at 00:57
  • 1
    Avoid the [deferred antipattern](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it), don't [assign to global variables from asynchronous callbacks](https://stackoverflow.com/q/23667086/1048572), and always return a promise instead! – Bergi Dec 16 '21 at 03:12
  • *"I have a controller function looking to set a bool based on the return of a service call"* the issue with that approach is that whatever is depending on that variable has no way to know when/if the value has been set/changed. Promises have been built to solve this exact problem. – Thomas Dec 18 '21 at 20:46

0 Answers0