Jak odczekać po wysłanej wiadomości z fetch() do serwera na odpowiedz?

0

Tutaj mam funkcje która pobiera zapisane wiadomości z Google Storage Local.
Po uruchomieniu funkcji fetchAsync() pobiera wiadomości, wysyła na serwer, ale nie odczekuje na odpowiedź. Jak zrobić, aby odczekiwało na odpowiedź?

Tutaj funkcja która działa, ale nie oczekuje na odpowiedź: https://4programmers.net/Pastebin/15102
Na lokalnym serwerze działa, ale jak musi już kilka sekund poczekać, to już nie czeka tylko nic nie pokazuje.

A na dole to co próbowałem coś sam zrobić, ale nadal brak odpowiedzi z serwera.

function getMessagesLocal() {
    return new Promise(resolve => {
  
      var data = [];
  
      chrome.storage.local.get(['convid', 'convlog'], function(val) {
  
        data.push(val["convlog"]);
        data = data.toString().replace(/(?:\r\n|\r|\n)/g, '<br>');
        const mydata = { conv: data, convid: val["convid"] };
        resolve(JSON.stringify(mydata));
  
      })
  
    })
}

async function fetchAsync () {

    /*getMessagesLocal().then(r => {
      console.log(r)
    })*/
  
    var r = getMessagesLocal()
    var mydata =  await r;
    console.log(mydata); // here show the results
  
    let response = await fetch("https://example.com/api", {
      method: "POST",
      //mode: 'no-cors',
      headers: {
        "Content-Type": "application/json"
      },
      body: mydata
    })
  
    let data2 = await response.text();
    console.log(data2) // no response from server 
  
}
  
  fetchAsync()
      .then(data => console.log(data))
      .catch(reason => console.log(reason))
0

To nie jest tak, że fetch nie czeka na odpowiedź serwera, tylko po prostu przeglądarka nie dostaje żadnych danych. Nic nie zwraca, bo albo faktycznie jest pusta zwrotka w kodzie albo jest jakiś problem z politykami bezpieczeństwa w przeglądarce. Sprawdź czy w konsoli lub w zakładce network nie ma jakich błędów spowodowanych przez CORS lub CSRF. Może też backend sprawdza origin z jakiego przychodzi request i odpowiada tylko wybranym domenom.

0
orkin napisał(a):

CORS lub CSRF

Okay, mam, działa już, Content-Type zamieniłem na "application/x-www-form-urlencoded"

Sprawdzam co chwile konsole, aby zobaczyć jakie są błędy, nie ma błędów. A wiadomosci są przesyłane na serwer i poprawnie zapisywane, ale nie zwraca żadnej odpowiedzi.
W Postman jak sprawdzam, działa dobrze, choć trzeba kilka sekund poczekać na odpowiedź.

Wysyła na serwer, ale nie czeka na odpowiedź serwera, chodź serwer zwraca odpowiedź po kilku sekundach:

sendMessages = async () => {
  
    var r = getMessagesLocal()
    var mydata =  await r;
    console.log(mydata)
  
    const settings = {
        method: 'POST',
        body: mydata,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded', // Działa!
        }
    };
    try {
        const fetchResponse = await fetch('https://example.com/api', settings);
        const data = await fetchResponse.text();
  
        console.log(data);
    } catch (e) {
      console.log(e);
    }    
  
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1