При запуске асинхронной функции внутри другой с помощью async / await не удается подключиться / извлечь ресурс - PullRequest
0 голосов
/ 19 мая 2019

Я создаю веб-приложение, используя Node и Express. У меня есть HTML-страница, которая делает запросы к моему API, используя Fetch API. В моей таблице у меня есть кнопка X для каждой строки, которая удаляет эту задачу (она работает нормально). Однако функция удаления deleteTask затем вызывает мою функцию tableTasks для перезагрузки таблицы с новыми данными. Запрос не выполняется с сообщениями об ошибках:

Не удалось загрузить ресурс: не удалось подключиться к серверу Необработанный отказ от обещания: Ошибка типа: Не удалось подключиться к серверу.

Со ссылкой на правильную конечную точку API, которая при открытии из другого источника (браузер, почтальон, другая кнопка на странице формы) дает правильные результаты.

Я уже пытался переместить ключевое слово await на await tableTasks изнутри deleteTask и использовал return. Теперь мой код работает внутри tableTasks и останавливается на этой строке:

const response = await fetch("http://XX.XX.XXX.XXX:3000/list");

С вышеуказанными ошибками. Я попытался изменить синтаксис await на .then и поместить остаток от tableTasks в функцию обратного вызова, но безрезультатно.

В deleteTask:

tableTasks(false);

В tableTasks:

async function tableTasks() {
    //Initialization
    const response = await fetch("http://XX.XX.XXX.XXX:3000/list");
    const data = response.json();
    //Do stuff with data
}

Я ожидаю, что когда эта функция вызывается, она перезагружает таблицу, но выдает ошибку. Нужно ли где-то добавить дополнительные await или ждать ответа другим способом?

1 Ответ

0 голосов
/ 19 мая 2019

Всегда инкапсулируйте вашу функцию async в блоке try/catch следующим образом:

async function f() {
    try{
          await asynchronous_method();
    }catch(err){
           //Handle Rejection.
    }
}

команда fetch возвращает promise.Обещание состоит из 2 частей.Resolve и Reject.Ключевое слово await возвращает все, что возвращается из части resolve.Если в fetch произошла ошибка, reject выполнится.Вы должны справиться с этим, иначе вы получите вышеуказанную ошибку.Также кажется, что есть некоторая ошибка соединения с сервером.

...