第二个异步功能永远不会完成

时间:2019-06-01 18:04:39

标签: javascript asynchronous

这是我为电子应用编写的某些代码的简化版本。我需要两个函数来运行,一个接一个。每个人都需要进行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”。

2 个答案:

答案 0 :(得分:0)

该问题一定是与request-promise-native库相关的,因为我能够通过将其移植为使用fetch库来解决此问题。

我用以下代码替换了send函数的正文:

return fetch(
    "http://localhost:7296/".concat(endpoint),
    {
        method: method,
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(input)
    }
).then(response => response.json())

答案 1 :(得分:0)

由于您的send()函数是异步调用,因此您还应该尝试使用async / await将其包装:

// Specify this require at the topmost portion of your file since declaring it
// inside your function means it will be called two or more.
const request = require("request-promise-native"); 


async function build_page() {...}

async function func_1() {...}

async function func_2() {...}

// Add async/await since this is also an asynchronous call
async function send() {
  await return request({
    url: "http://localhost:7296/Categories",
    method: "POST",
    json: true,
    body: {"token": localStorage.getItem("token")}
  })
}