异步完成后如何返回变量

时间:2019-02-19 14:58:59

标签: javascript api asynchronous fetch-api

我正在尝试在自己的网站上创建一个到另一个域(我没有访问权限)的登录门户。

只需将表单凭据发布到其他域登录页面,显然就可以了。

<form method="post" action="someOtherDomain.com/login>
    <input id="formUsername" type="text" required name="Username" placeholder="username">
    <input id="formPassword" type="text" required name="Password" placeholder="password">
    <button type="submit">Log in</button>
</form> 

除了现在,我希望我的网站让用户知道他们的用户名/密码在我的网站上是否正确,因此请在实际发布之前。

我可以访问另一个域上的API进行登录。

因此,要检查登录是否成功,我是从这套普通的javascript开始的。

function checkLogin(){
  var data = {username: document.getElementById("formUsername").value, password: document.getElementById("formPassword").value;
  fetch(url, {
    method:
    body: JSON.stringify(data),
    headers:{
        'Content-Type': 'application/json'
    }
  }).then(res => res.json())
    .then(res => console.log('Success:', JSON.stringify(res)))
    .catch(error => console.error('Error:', error));
 }

我想我要重写一下,添加一个if语句以确保此函数正确返回true或false,然后将其添加到表单上的unsubmit函数中。

不幸的是,这是我偶然发现Java异步编码的地方,在获取和处理数据之后,我似乎无法返回任何内容。

我遇到了使用回调函数的情况,希望我可以按自己想要的顺序运行代码,但运气不好。

这是我目前拥有的:

var url = 'someOtherDomain.com/api/login';
var resLength = 0;

function startCheck(){
  resLength = 0;
    return checkLogin(function() {
        if(resLength > 65){
            return true;
        }
        return false;
    });
 }

function checkLogin(_callback){
  resLength = 0;
  var data = {username: document.getElementById("formUsername").value, password: document.getElementById("formPassword").value};
  fetch(url, {
    method:
    body: JSON.stringify(data),
    headers:{
        'Content-Type': 'application/json'
    }
  }).then(res => res.json())
    .then(res => resLength = JSON.stringify(res).length)
    .then(res => _callback())
    .catch(error => console.error('Error:', error));
}

是的,目前我只是在检查响应的长度,以确保登录成功。可以选择其他方法,但这应该可以用于测试。

除了我试图将IF检查放在另一个.then()语句中外,但这失败了,因为我无法从诺言中返回任何内容,因为它将结果赋予下一个诺言而不是结束那里的功能。

我尝试了其他一些方法,但没有任何效果。大多数帖子似乎仍然使用旧的XMLrequest,并没有真正帮助我。

此后,我需要在更“复杂”的注册表格上更频繁地执行此操作,因此如果有人可以帮助我弄清楚如果登录不成功,如何将false返回到按钮,如果登录成功,则返回true,我将不胜感激。

0 个答案:

没有答案