Javascript 如何在React Native中实现回调函数?
我只是想知道如何在Javascript 如何在React Native中实现回调函数?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我只是想知道如何在onPress函数中实现回调函数。我想确保第一个功能完成,然后触发第二个进程 onPress={() => { onSignIn(); //run this function first if(_values.success == 1){ //then run this after onSignIn() function completed navigation.navigate("SignedIn");
onPress
函数中实现回调函数。我想确保第一个功能完成,然后触发第二个进程
onPress={() => {
onSignIn(); //run this function first
if(_values.success == 1){ //then run this after onSignIn() function completed
navigation.navigate("SignedIn");
}
}}
onSignIn()
参考:首先,onSign()必须是一个async
函数,不要添加done()
函数,要在后面处理它:
export const onSignIn = async () => {
if (_values.username && _values.password) {
fetch("http://localhost:3001/sessions/create", {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: _values.username,
password: _values.password
})
})
.then((response) => response.json())
.then((responseData) => {
if(responseData.access_token){
AsyncStorage.setItem(USER_KEY, responseData.access_token);
_values.success = 1;
alert("Login successfully!");
return _values.success;
} else {
alert("Wrong username and password!");
_values.success = 0;
return _values.success;
}
})
} else{
throw "Please enter your username and password.";
}
}
然后,你只要做:
onPress={() => {
onSignIn().then( (values) => {
if(values.success == 1){
navigation.navigate("SignedIn");
}
})
.catch(error => console.log(error)) //do something in case onSignIn fails
}}
这段代码应该对您有所帮助
async onPressFunc() {
await onSignIn(); //run this function first
if(_values.success == 1){ //then run this after onSignIn() function completed
navigation.navigate("SignedIn");
}
}
onPress={this.onPressFunc}
“wait foronSignIn
to complete”(等待onSignIn
完成)我想您的意思是这是一个异步函数,然后可以使用wait
操作符等待它结束
onPress={() => {
await onSignIn(); //run this function first
if(_values.success == 1){ //then run this after onSignIn() function completed
navigation.navigate("SignedIn");
}
}}
然后,您需要将async
添加到您的onSignIn函数中:
onSignIn = async () => {console.log("signing in")}
export default class Example extends Component {
pressEvent = async event => {
if (await onSignIn()) navigation.navigate("SignedIn");
}
render() {
return (
<div onPress={this.pressEvent}>
</div>
)
}
}
这里有一个更“反应式”的方法来处理您的整个流程:
import React, { Component } from 'react'
export default class Example extends Component {
onSignIn = async () => {
console.log('singing in....')
}
pressEvent = async event => {
await this.onSignIn(); //run this function first
if (_values.success == 1) { //then run this after onSignIn() function completed
navigation.navigate("SignedIn");
}
}
render() {
return (
<div onPress={this.pressEvent}>
</div>
)
}
}
现在,您将如何从该函数获取响应:
onSignIn = async () => {console.log("signing in")}
export default class Example extends Component {
pressEvent = async event => {
if (await onSignIn()) navigation.navigate("SignedIn");
}
render() {
return (
<div onPress={this.pressEvent}>
</div>
)
}
}
导出默认类示例扩展组件{
按事件=异步事件=>{
if(wait onSignIn())navigation.navigate(“SignedIn”);
}
render(){
返回(
)
}
}
从方法返回一个承诺,并将.then()添加到函数调用中
export const onSignIn = async () => {
const promise = new Promise(async (resolve, reject) => {
try {
//do something and return result on success
resolve(result);
}catch(msg) { reject(msg);}
});
return promise;
}
按如下方式调用该方法:
onSignIn ().then(
(response,error) => {
//get callback here
});
如果我的是export const onSignIn=()=>,怎么办?到目前为止没有错误消息,但是_values.success仍然显示null。你的函数onSignIn返回了什么?你能添加代码吗@MohammadNurdin@MohammadNurdin我懂了。。。尝试我添加的更改如果我添加等待,我会收到一条错误消息。“等待是一个保留字”。您能给我们看一下
onSignIn
功能的声明吗?顺便说一句,我不想使用pressEvent功能。要确保在onPress函数中运行。仅供参考,其在组件外部运行。请检查我的回购。我想你应该从阅读React中事件的工作原理开始:你试过了吗?我收到一条错误消息。“等待”是一个保留字。