【问题标题】:JavaScript Promise return Pending but i need only the value [duplicate]JavaScript Promise 返回 Pending 但我只需要值 [重复]
【发布时间】:2020-02-18 21:21:42
【问题描述】:

你能帮我处理这段代码 sn-p 吗?在这一部分中,我向我的 c# 控制器发出 ajax 请求,只是为了验证电子邮件并获取布尔值,但在此过程中,promise 返回状态pending 产生问题,因为我真的只需要promise 中的值,这里是我的代码:

let Email = input;
let valida = ValidaEmail(Email);
console.log(valida);

函数

async function ValidaEmail(email) {
    let promise = new Promise(resolve => {
        var string = JSON.stringify(email);
        var xhttp = new XMLHttpRequest();
        xhttp.open("POST", "/Home/EmailisValid", true);
        xhttp.setRequestHeader("Content-type", "application/json");
        xhttp.onreadystatechange = () => {
            if (xhttp.readyState === 4 && xhttp.status === 200)
                resolve(xhttp.response);
        };
        xhttp.send(string);
    });
    let retorno = await promise;
    console.log(retorno);
}

输出:

【问题讨论】:

标签: javascript ajax promise


【解决方案1】:

首先你必须从ValideEmail返回promise的结果。

async function ValidaEmail(email) {
    let promise = new Promise(resolve => {
        var string = JSON.stringify(email);
        var xhttp = new XMLHttpRequest();
        xhttp.open("POST", "/Home/EmailisValid", true);
        xhttp.setRequestHeader("Content-type", "application/json");
        xhttp.onreadystatechange = () => {
            if (xhttp.readyState === 4 && xhttp.status === 200)
                resolve(xhttp.response);
        };
        xhttp.send(string);
    });
    let retorno = await promise;
    console.log(retorno);
    //////
    return retorno;
    //////
}

当你使用 ValidateEmail 函数时,你必须使用 await 或 .then();

let Email = input;
///
let valida = await ValidaEmail(Email);
console.log(valida);
// or
ValidaEmail(Email).then((valida) => {
   console.log(valida);
})

【讨论】:

  • 嗨,抱歉耽搁了,我很忙,无论如何,我都尝试了这种方式 ValidaEmail(Email).then((valida) => { console.log(valida); }) -承诺总是返回待处理,并且在 let valida = await ValidaEmail(Email);在控制台中显示此错误“Uncaught SyntaxError: await is only valid in async function” :( –
  • 请求中的承诺是否得到解决?使用 resolve(xhttp.response); 将控制台日志放在附近;
  • 是解决,在控制台中显示 false 或 true,但问题是承诺不等待发送解决值并返回未决的承诺:(按逻辑,我尝试让验证 = 等待验证电子邮件(电子邮件);但在控制台中显示此错误“未捕获的语法错误:等待仅在异步函数中有效”
猜你喜欢
  • 2021-04-21
  • 2021-04-19
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2021-01-03
  • 2021-10-26
  • 2019-12-23
相关资源
最近更新 更多