Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript,脚本运行太快?_Javascript_Json_Routes_Promise_Restify - Fatal编程技术网

Javascript,脚本运行太快?

Javascript,脚本运行太快?,javascript,json,routes,promise,restify,Javascript,Json,Routes,Promise,Restify,我有一个名为check的变量,它将接收一个“True/false”值。通过一个名为checkUserExist()的函数 然后我有一个if语句来检查它是真是假 问题是if语句在“check”从它调用的函数获取其值之前运行。所以check仍然没有定义 function createUser(){ let userName = document.getElementById("create_username").value, password = document.getE

我有一个名为check的变量,它将接收一个“True/false”值。通过一个名为checkUserExist()的函数

然后我有一个if语句来检查它是真是假

问题是if语句在“check”从它调用的函数获取其值之前运行。所以check仍然没有定义

function createUser(){

    let userName = document.getElementById("create_username").value,
        password = document.getElementById("create_password").value;
    console.log("Create user")
    console.log("Username:", userName, "Password:", password)

    var check = checkUsersExist(userName)

    console.log("Svar fra checkUsers",check)

    if(check == "true"){
        console.log("UserName all ready exists")
    }else if(check == "false") {
        console.log("UserName is avaible")
    }else{
        console.log("An error has uccured")
    }
}
function checkUsersExist(userName){
    let headers = new Headers();
        headers.append('Content-Type', 'application/json');

    var init = {
        method: 'PUT',
        headers: headers,
        body: `{
            "userName":"${userName}"}`,
        cache: 'no-cache',
        mode: 'cors'
        };

    var request = new Request('http://localhost:3000/users/check', init);

    fetch(request)
        .then(response => 
            {
                console.log("Response", response, "Request sent to server", request)
                return response;
            })
        .catch(err => 
            {   
                console.log(err)
            });

}
我已经在这上面呆了很长时间了。我不知道如何解决这个问题。我的fetch in checkUserExist()确实从路由中获得了我要查找的答案

这是我的路线,如果你也有兴趣看的话

module.exports = function (server) {
    server.put('/users/check', function (req, res) {
        console.log("")
        console.log("=========== NEW CHECK ============")
        console.log("")
        console.log("Kom til check på route")
        let userName = req.body.userName,
            check = "false";

        console.log("UserName received from Index.html =", userName)

        fs.readFile('./resources/users.json', 'utf8',
            function readFileCallback(err, data){
                if (err){
                    console.log(err);
                } 
                else {
                    users = JSON.parse(data); //now its a object

                    for (i = 0; i < users.table.length; i++) {
                        if(users.table[i].userName == userName){
                            console.log("===Current Check===")
                            console.log("Table =", users.table[i].userName, "Index =", userName)
                            check = "true"
                        }
                    }

                    console.log("check værdi =", check)
                    res.json(200, check)
                }
            }
        );

    });
module.exports=函数(服务器){
server.put('/users/check',函数(req,res){
console.log(“”)
console.log(“===================新检查====================”)
console.log(“”)
控制台日志(“Kom til检查på路线”)
让userName=req.body.userName,
check=“false”;
console.log(“从Index.html=,UserName接收的用户名”)
fs.readFile('./resources/users.json','utf8',',
函数readFileCallback(错误,数据){
如果(错误){
控制台日志(err);
} 
否则{
users=JSON.parse(data);//现在它是一个对象
对于(i=0;i

我正在使用Json文件和Cookie来提高我的技能,因此我不在该项目中使用数据库。

由于这是一个异步调用,在请求收到答复之前到达函数“checkUsersExist”的结尾。因此,您得到的结果是“undefined”

尝试使用回调编写函数,将return语句替换为函数调用,然后像这样调用它:

checkUsersExist(userName, check => {
    if(check === "true"){
        console.log("UserName all ready exists")
    }else if(check === "false") {
        console.log("UserName is avaible")
    }else{
        console.log("An error has uccured")
    }

});

您的checkUserExists将始终返回undefined,无论它是否快速完成,因为它是异步的。您需要做的是在checkUsersExist中添加回调机制,以便在收到响应时调用您的回调。我无法验证下面提供的更新代码,但您可以尝试一下

function createUser() {

  let userName = document.getElementById("create_username").value,
    password = document.getElementById("create_password").value;
  console.log("Create user")
  console.log("Username:", userName, "Password:", password)

  checkUsersExist(userName, function(check) {
    console.log("Svar fra checkUsers", check)

    if (check == "true") {
      console.log("UserName all ready exists")
    } else if (check == "false") {
      console.log("UserName is avaible")
    } else {
      console.log("An error has uccured")
    }
  })
}

function checkUsersExist(userName, onSuccess) {
  let headers = new Headers();
  headers.append('Content-Type', 'application/json');

  var init = {
    method: 'PUT',
    headers: headers,
    body: `{
            "userName":"${userName}"}`,
    cache: 'no-cache',
    mode: 'cors'
  };

  var request = new Request('http://localhost:3000/users/check', init);

  fetch(request)
    .then(response => {
      console.log("Response", response, "Request sent to server", request)
      onSuccess(response);
      return response;
    })
    .catch(err => {
      console.log(err)
    });

}

这是异步代码的一个棘手问题。您的脚本正好通过了
checkUsersExist
,因为该函数中的
fetch
从该块的其余部分异步运行。承诺在这里会帮到您很多忙:您点了一个比萨饼,一旦挂断电话,您就尝试吃比萨饼。仍然不会rk…您不能从异步方法返回…我没有说异步函数将返回值。在更新的checkUsersExist中,该方法接收回调参数onSuccess。从服务器接收响应时调用onSuccess。这实际上工作得非常完美。我必须将获取更改一点。但是我t完全按照我现在希望的方式执行:fetch(request).then(函数(response){//console.log(“response”,response,“请求发送到服务器”,request)return response.json();}).then(函数(result){console.log(“result=“+result”)onSuccess(result);}).catch(函数(err){console.log(err)});非常感谢您的帮助!