Функция Asyn c возвращает значение, отображается на консоли, но не определена в другом месте - PullRequest
0 голосов
/ 25 марта 2020

Функция 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 дня до публикации здесь.

Буду признателен за вашу помощь.

1 Ответ

0 голосов
/ 26 марта 2020

Я внес некоторые изменения в определение своей функции, и оно сработало

 async function getData(country, date, level, callback){


 let response = await fetch(url);
 let rawdata = await response.text();

 if(response.status == 200){

  console.log('Response: 200 OK');

   //Removed this line and to be handled separately 
   //let countryUpdate = extractDailyUpdate(rawdata, country);

   callback(rawdata);

  }

else {
  if(level >= 0){
   //Try again with previous date
    getData(country, prevDate(date, 1), level - 1, callback);
  }
  else {console.log('Ran out of attempts...'); }
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...