Я пытаюсь вызвать функцию, которая будет извлекать данные из объекта хранилища.
Мне нужно сделать это и присвоить возвращаемое значение хранилища перед вызовом следующей функции, которая также имеет функцию асинхронности. Это первый вызов функции:
getUnits(){
this.storage.get('units').then((val => {
if (val != null){
this.units = val;
console.info("Settings.TS: #28 Got units : " + this.units);
}else{
this.units = "metric";
console.info("Settings.TS: #31 No saved units found, assigning metric.")
}
}));
Второй блок кода вызывается сразу после getUnits() выше:
this.getUnits();
console.info("WEaTHER.TS Getting City Weather...city / country = " + city + " / " + country);
if (country != null || country != ""){
city = city+","+country;
console.info("WEATHER.TS: coutry code enterView, city = " + city + " and units: " + this.units);
}
//https://api.openweathermap.org/data/2.5/weather?q=Dublin&appid=4f91a3e665c56d59e4c7d9045d38e85a
const weatherJSON = "https://api.openweathermap.org/data/2.5/weather?q = "+city+"&units = "+ this.units + "&appid = "+this.appid;
console.info("WEATHER.TS Getting this API call : " + weatherJSON);
return this.http.get(weatherJSON);
Когда код выполняется, поток управления переходит туда и обратно между обеими функциями, поскольку они асинхронны.
Мой вопрос в любом случае, я могу гарантировать, что функция A полностью выполнится до того, как будет выполнен блок закрытия, непосредственно следующий за ней?
С асинхронными функциями, если вы хотите, чтобы функция B вызывалась ТОЛЬКО после завершения выполнения функции A, вы вызываете функцию B в блоке then
функции A. Например, в вашем случае это будет что-то вроде этого
getUnits(){
this.storage.get('units').then((val => {
if (val != null){
this.units = val;
console.info("Settings.TS: #28 Got units : " + this.units);
}else{
this.units = "metric";
console.info("Settings.TS: #31 No saved units found, assigning metric.")
}
//Call the second function here
}));