Функция Asyn c возвращает значение, которое может быть зарегистрировано в консоли, но не определено в другом месте
Вызов функции:
getData(msg.queryCountry, new Date(), 3, function callback(data){
console.log('call back func:', data); //works
console.log(data[0].name); // works
chrome.runtime.sendMessage(sender.id,{'cdata':data}); //doesn't work; 'undefined' received on receiver's end
})
.then( response =>{
//console.log('response:', response);
console.log('retrieval successful...');
})
.catch( err => {
console.error(err);
});
Определение функции:
async function getData(country, date, level, callback){
let response = await fetch(url);
let rawdata = await response.text();
if(response.status == 200 && response.ok == true){
console.log('Response: 200 OK');
//extracts the data for the country from .csv file received
let countryUpdate = extractDailyUpdate(rawdata, country);
callback(countryUpdate);
}
else {
if(level >= 0){
//Try again with previous date
getData(country, prevDate(date, 1), level - 1, callback);
}
else {console.log('Ran out of attempts...'); }
}
}
Вывод:
console.log('call back function:', data);
показывает полученные данные, но когда я отправляю данные, chrome.runtime.sendMessage(sender.id,{'cdata':data});
, на стороне получателя он просто отображается как «неопределенный».
Я понимаю, что смешиваю асин c функции, считая их синхронными; боролись за 4 дня до публикации здесь.
Буду признателен за вашу помощь.