Fetch API 在 Node.js 中的 POST 请求后跳过 .then() 块:JSON 响应未处理

问题描述 投票:0回答:1

我在 JavaScript 代码中使用 fetch API 向特定端点发出 POST 请求。但是,我遇到一个问题,其中 fetch 调用似乎完全跳过 .then() 块并直接进入 return false 语句。这是我的代码的简化版本:

function login() {
    var emailVar = email_input.value;
    var senhaVar = senha_input.value;

    if (emailVar == "" || senhaVar == "") {
        return false;
    }

    console.log("FORM LOGIN: ", emailVar);
    console.log("FORM SENHA: ", senhaVar);

    fetch("/usuario/autenticar", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify({
            emailServer: emailVar,
            senhaServer: senhaVar
        })
    }).then(function (resposta) {
        console.log("HERE'S IS THEN()!")

        if (resposta.ok) {
            console.log(resposta);


            resposta.json().then(json => {
                console.log(json);
                console.log(JSON.stringify(json));
                sessionStorage.EMAIL_USUARIO = json.email;
                sessionStorage.NOME_USUARIO = json.nome;
                sessionStorage.ID_USUARIO = json.id;

            });

        } else {

            console.log("login error");

            resposta.text().then(texto => {
                console.error(texto);
            });
        }

    }).catch(function (erro) {
        console.log(erro);
    })
    return false;
}

我遇到的奇怪行为是,在 fetch 调用之后,特别是当它到达 body: JSON.stringify(...) 部分时,它直接进入 return false 语句,而不输入 .then() 或 .catch () 块。我检查了浏览器开发者工具中的“网络”选项卡,请求似乎已成功发送,并带有预期的 JSON 正文。

我不确定为什么 fetch 调用会以这种方式运行并跳过 .then() 块。任何见解或建议将不胜感激。谢谢!

我期望发生的是,在 fetch 调用之后,它将进入 .then() 块,解析 JSON 响应,并设置一些会话存储变量。然而,实际发生的情况是,它完全跳过了 .then() 块,直接进入 return false 语句。

我检查了浏览器开发人员工具中的“网络”选项卡,请求似乎已成功发送,并带有预期的 JSON 响应。奇怪的行为是 .then() 块根本没有被执行。

javascript mysql node.js fetch-api endpoint
1个回答
0
投票

您需要使您的函数异步并在调用 fetch 时使用await。抱歉,没有足够的分数来发表评论。

async call()
{
   await fetch(...)
}
© www.soinside.com 2019 - 2024. All rights reserved.