Вторая асинхронная функция никогда не заканчивается - PullRequest
1 голос
/ 01 июня 2019

Вот упрощенная версия кода, который я пишу для электронного приложения. Мне нужны две функции для запуска, одна за другой. Каждому нужно сделать вызов API, а затем дождаться ответа, прежде чем закончить.

async function build_page()
{
    await func_1()
    await func_2()
}

async function func_1()
{
    console.log("1 Start")

    await send().then(
        function (response)
        {
            console.log("1 Middle")
        }
    )
    console.log("1 End")
}

async function func_2()
{
    console.log("2 Start")

    await send().then(
        function (response)
        {
            console.log("2 Middle")
        }
    )
    console.log("2 End")
}

function send()
{

    const request = require("request-promise-native")

    return request({
        url: "http://localhost:7296/Categories",
        method: "POST",
        json: true,
        body: {"token": localStorage.getItem("token")}
    })

}

Я хочу, чтобы консоль выводила «1 Начало, 1 Средний, 1 Конец, 2 Начало, 2 Средний, 2 Конец», но в настоящее время она делает только «2 Начало». Я не уверен, почему func_2 не заканчивается. Когда я закомментирую вызов func_1, func_2 завершится, как и ожидалось, и когда я поменяю местами вызовы func_1 и func_2, func_1 перейдет только в «1 Start».

1 Ответ

0 голосов
/ 02 июня 2019

Проблема, возможно, была связана с библиотекой request-обещание-родной, потому что я смог исправить проблему, перенеся ее на использование библиотеки извлечения.

Я заменил тело функции отправки следующим кодом:

return fetch(
    "http://localhost:7296/".concat(endpoint),
    {
        method: method,
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(input)
    }
).then(response => response.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...