Javascript,脚本运行太快?
我有一个名为check的变量,它将接收一个“True/false”值。通过一个名为checkUserExist()的函数 然后我有一个if语句来检查它是真是假 问题是if语句在“check”从它调用的函数获取其值之前运行。所以check仍然没有定义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
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)});非常感谢您的帮助!