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