Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使一个函数先于另一个函数执行_Javascript_Android_Reactjs_React Native - Fatal编程技术网

Javascript 如何使一个函数先于另一个函数执行

Javascript 如何使一个函数先于另一个函数执行,javascript,android,reactjs,react-native,Javascript,Android,Reactjs,React Native,我有一个搜索输入,我希望进行“实时搜索” 我的意思是当用户更改输入文本的值时 结果更新!我使用react native和sqlite作为本地数据库 现在的结果是“搜索用户”功能之后执行的“设置状态”功能!当我把 用户id“2”我没有收到任何结果,但当我删除“2”时,我收到了“2”的结果,因此我得出结论 这两个功能必须在第一个之后执行第二个!如果您有其他解决方案或如何解决此问题,请 searchUser = () => { const { input_user_id }

我有一个搜索输入,我希望进行“实时搜索” 我的意思是当用户更改输入文本的值时 结果更新!我使用react native和sqlite作为本地数据库

现在的结果是“搜索用户”功能之后执行的“设置状态”功能!当我把 用户id“2”我没有收到任何结果,但当我删除“2”时,我收到了“2”的结果,因此我得出结论 这两个功能必须在第一个之后执行第二个!如果您有其他解决方案或如何解决此问题,请

      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))

谢谢你,我试过你的回复,这是有效的,但你可以解释更多吗?