Javascript 如何使一个函数先于另一个函数执行
我有一个搜索输入,我希望进行“实时搜索” 我的意思是当用户更改输入文本的值时 结果更新!我使用react native和sqlite作为本地数据库 现在的结果是“搜索用户”功能之后执行的“设置状态”功能!当我把 用户id“2”我没有收到任何结果,但当我删除“2”时,我收到了“2”的结果,因此我得出结论 这两个功能必须在第一个之后执行第二个!如果您有其他解决方案或如何解决此问题,请Javascript 如何使一个函数先于另一个函数执行,javascript,android,reactjs,react-native,Javascript,Android,Reactjs,React Native,我有一个搜索输入,我希望进行“实时搜索” 我的意思是当用户更改输入文本的值时 结果更新!我使用react native和sqlite作为本地数据库 现在的结果是“搜索用户”功能之后执行的“设置状态”功能!当我把 用户id“2”我没有收到任何结果,但当我删除“2”时,我收到了“2”的结果,因此我得出结论 这两个功能必须在第一个之后执行第二个!如果您有其他解决方案或如何解决此问题,请 searchUser = () => { const { input_user_id }
searchUser = () => {
const { input_user_id } = this.state;
console.log(this.state.input_user_id);
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM table_user where user_id = ?',
[input_user_id],
(tx, results) => {
var len = results.rows.length;
console.log('len', len);
if (len > 0) {
this.setState({
userData: results.rows.item(0),
});
} else {
alert('No user found');
this.setState({
userData: '',
});
}
}
);
});
};
constructor(props) {
super(props);
this.state = {
input_user_id: '',
userData: '',
};
}
这是我的文本输入
<Mytextinput
placeholder="Enter User Id"
onChangeText={input_user_id => {this.searchUser(this); this.setState({ input_user_id }); }}
style={{ padding:10 }}
/>
{this.searchUser(this);this.setState({input_user_id});}
样式={{填充:10}}
/>
在react中设置状态
您可以使用回调在setState以这种方式完成后执行某些操作-
searchUser(callback_func) => {
//... code here
this.setState({
userData: '',
}, () => { callback_func(status); }); // status is not required, but you can signify failures this way
}
// now you can use searchUser like this -
searchUser(status => {
//do this when set state done
});
为什么不直接将输入\用户\ id传递给函数? 否则你可以
this.setState({input_user_id }, () => this.searchUser(this))
对!!
当你这样做的时候
function(input_user_id) {
this.searchUser(this);
this.setState({ input_user_id })
}
const { input_user_id } = this.state;
这两个函数都按顺序运行,但setState是异步的
所以当你这么做的时候
function(input_user_id) {
this.searchUser(this);
this.setState({ input_user_id })
}
const { input_user_id } = this.state;
该状态尚未更新
因为您可以将回调函数传递给setState
请确保在执行此.searchUser()之前更新输入用户id
this.setState({input_user_id }, () => this.searchUser(this))
谢谢你,我试过你的回复,这是有效的,但你可以解释更多吗?