我对在C(EE课程)中具有一定背景知识的本机做出反应非常陌生,并且我只是试图理解这些概念。我目前正在关注有关Udemy的本机反应课程。
我正在尝试使用firebase + react native创建登录表单。 如果用户登录时发生错误,我想在此通知用户。
下面有两套代码,我尝试做同样的事情,其中一套有效,另一套无效。我想了解为什么第一个可行,为什么第二个不可行
这确实有效:
firebase.auth().createUserWithEmailAndPassword(email, password)
.catch((error) => {
this.setState({ error: error.message, loading: false });
});
为什么我需要在箭头功能的左侧添加错误?根据我的理解,箭头功能左侧的内容可以看作是“输入”,而右侧是系统/输出?
这不起作用:
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(this.createFailure.bind(this))
createFailure() {
.catch((error) => {
this.setState({ error: error.message, loading: false });
});
}
这给了我一个解析错误。在渔获物之前。
我认为我不太了解.catch的工作原理,但是我只能在没有'。'的mozilla上找到catch()。 似乎我对某些元素的工作方式缺乏基本的了解,是否有推荐的YouTube系列文章解释了这些构建基块?我发现文档中经常出现过多的极端情况,这使一切都变得混乱。
答案 0 :(得分:3)
createUserWithEmailAndPassword
返回一个promise对象。该对象具有一个catch
方法,您可以使用该方法来连接处理程序,以处理诺言拒绝的时间。因此.
就像.
中的$("#foo").html()
一样:它正在访问函数返回的对象上的方法。
为什么我需要在箭头功能的左侧添加错误?根据我的理解,箭头功能左侧的内容可以看作是“输入”,而右侧是系统/输出?
是的,是的。如果promise拒绝,则会调用箭头函数。当它被调用时,它接收到错误作为输入,然后对该错误执行某些操作。
此使用承诺的异步代码:
doSomething()
.then(data => {
// ...do something with data...
})
.catch(error => {
// ...do something with error...
});
从逻辑上讲,与此同步代码相同:
try {
const data = doSomething();
// ...do something with data
} catch (error) {
// ...do something with error
}
实际上,如果您使用async
function,则可以使用几乎完全像这样的promise来编写异步版本:
// (within an `async` function)
try {
const data = await doSomething();
// Note -----^^^^^^
// ...do something with data
} catch (error) {
// ...do something with error
}
如果您认为发生错误时要调用createFailure
,则您的代码将不起作用,您可能希望这样做(请参见注释):
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(result => {
// This is the success path
this.setState({/*...from result...*/});
}
.catch(error => {
// This is the error path
this.createFailure(error);
});
或在async
函数中:
// (within an `async` function)
try {
const result = await firebase.auth().createUserWithEmailAndPassword(email, password);
// This is the success path
this.setState({/*...from result...*/});
} catch (error) {
// This is the error path
this.createFailure(error);
}