【发布时间】:2017-07-25 07:59:33
【问题描述】:
我有一个检查数据库中是否存在令牌的函数。问题是返回 bool 值需要一些时间,我需要暂停函数,以便函数意识到令牌已存在并再次运行查询。
const registerToken = dispatch => {
var tokenExisted = null
do {
let token = generateRandomToken();
firebase.database().ref(`/Token`).orderByChild("token").equalTo(token).once("value", snapshot => { // check whether token exists
if (!snapshot.val()) { // if token not exist
token = false;
// register token to firebase
} else {
token = true; // continue the loop to generate a new token and query again
}
})
} while (tokenExisted === true);
}
我的设置基本上是一个 do-while 循环,当函数第一次被调用时
tokenExisted = null,然后将生成一个随机的 4 位令牌,并将一个查询发送到 firebase 并验证它是否存在令牌。
如果令牌已经存在,那么tokenExisted = true。我希望它会执行分配,但 Javascript 的单线程性质将在查询返回任何内容之前到达循环的末尾。
我想使用setTimeout 并定期在tokenExisted = null 时添加一些少量时间以进行安全防护,以便该函数始终在查询函数返回任何内容时捕获。
有没有人有更好的方法来实现同样的目标?
【问题讨论】:
-
完全错误的异步代码方法。在异步调用的回调中,您要么满意,要么触发另一个异步调用。你不能在这里使用同步的
do..while。 -
更不用说你不能暂停Javascript
标签: javascript reactjs firebase firebase-realtime-database logic