我对JavaScript比较陌生,无法理解state = { email: '', password: '', userName: '', errorMessage: null }
handleSignUp = () => {
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then((userInfo) =>{
userInfo.user.updateProfile({displayName: this.state.userName}).then(firebase.auth().currentUser.reload()).then((s) => {this.props.navigation.navigate('Navigator')})
})
.catch(error => this.setState({ errorMessage: error.message }))
}
书中的代码。它用于触发鼠标移动,频率不超过500毫秒,但我不明白这里的作用是什么。
Eloquent Javascript
答案 0 :(得分:1)
第一次启动代码时,scheduled
的值为空,并且在触发事件时,它将进入if
条件,并等待500 ms
,同时,函数将scheduled
设置为某个值。 500ms
等待时间结束后,它将再次将scheduled
设置为null
。
因此,每次将scheduled
设置为null
时都会发生。当事情开始发生时,它scheduled
变成了某种价值,或者没有其他事情发生。
不要混淆。
假设,mousemove事件在1秒钟内触发了100次。因此,在激发第一个mouseevent时,如果系统已经scheduled
,我们要求系统不执行任何操作。并使用上面的代码,我们知道对于scheduled
,一切仍然500ms
。这样,mousemove事件仍将执行100次,但是mousemove事件执行的代码将在一秒钟内执行两次,而不是100次。
答案 1 :(得分:1)
您不必将值保留为“ null”。它也可以是基于逻辑的任何其他类型(例如布尔值)。请参阅以下带有布尔值的示例-
let scheduled = false;
window.addEventListener("mousemove", event => {
if (!scheduled) {//*if not scheduled
setTimeout(() => {
document.body.textContent =
`Mouse at ${event.pageX}, ${event.pageY}`;
scheduled = false;
console.log("Counter restarting")
}, 3000);
}
scheduled = true;
});
首先,当程序启动时,“ scheduled”标志设置为false-表示3秒钟内没有设置当前超时。因此,我们先设置超时,然后将“预定标志”设置为true。一旦达到超时,将打印当前鼠标位置,并将“已计划”标志设置为false,然后重复该过程。