gpt4 book ai didi

javascript - 我想在 .subscribe 内创建一个本地存储,但它在所有函数之后创建本地存储

转载 作者:行者123 更新时间:2023-12-02 21:31:58 25 4
gpt4 key购买 nike

我正在尝试使用 Angular 来检查用户是否存在于 MySQL 数据库中。我正在 .subscribe 中创建一个本地存储项,因此如果用户存在,它会创建一个如下所示的本地存储:

localStorage.setItem("exist","true"); 

但如果它不存在,则:

localStorage.setItem("exist","false");

在函数之后,我检查它是 true 还是 false,但它是 null,因为 .subscribe 在所有函数之后生成它。因此,如果我第二次检查,它会使本地存储项目正确。

this.userService.getAutor(id)
.subscribe(
(data) => { // Successins
localStorage.setItem("exist","true");
},
(error) => { // error
localStorage.setItem("exist","false");
}
);
}

这是我调用函数的地方

  this.usuarioExiste(this.dniAutor);

if(localStorage.getItem('existe') == 'false'){
var expReg = /^(\d{8})([A-Z])$/;

if(expReg.test(this.dniAutor)){

this.userService.crearAutor(JSONform)
.subscribe(

(data) => { // Success
console.log("¡Bien HECHO!");
}
);
alert("Autor añadido correctamente");
}
else{
alert("Dni mal introducido")
}

最佳答案

After the function I check if it is true or false, but it is null

错误的方式

this.userService.getAutor(id)
.subscribe(
(data) => { // Successins
localStorage.setItem('existe',"true"); // <-- called after functionCheckIfTrueOrFalse, NO DATA in storage yet
},
(error) => { // error
localStorage.setItem('existe',"false"); // <-- called after functionCheckIfTrueOrFalse, NO DATA in storage yet
}
);
}
functionCheckIfTrueOrFalse() // <- is called before any localStorage.setItem()

正确的方法

this.userService.getAutor(id)
.subscribe(
(data) => { // Successins
localStorage.setItem('existe',"true");
functionCheckIfTrueOrFalse() // <- localStorage HAS the data
},
(error) => { // error
localStorage.setItem('existe',"false");
functionCheckIfTrueOrFalse() // <- localStorage HAS the data
}
);
}

知识

如果您想花时间了解其底层工作原理,可以查看this article .

简而言之,JavaScript 以不同的方式处理异步步骤:

enter image description here

您得到null,因为您在从异步步骤获取数据之前先从同步队列读取数据。

关于javascript - 我想在 .subscribe 内创建一个本地存储,但它在所有函数之后创建本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60602234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com