使用嵌套异步的React-Native无法正常工作

时间:2019-12-19 16:44:20

标签: react-native promise async-await

我有一些互惠互利的方法,我希望其中一个可以在另一个方法之后开始,但是它并不能完全按照我想要的方式工作。在另一个问题中,我在正常方法中使用了async和await,但是我没有设法使用Google APIS和嵌套函数。

async componentDidMount() {
    await this.getCityList();
    console.log(this.state.cities)
    await this.currentLocation();
    await this.getVenueInformation();
  }

此时,第一个函数可以正常工作,并且在传递所需的函数后,将转到第二个方法。同样,我必须将第二种方法的输入放到第三种方法中,但失败了。

Current location method:
    currentLocation() {
        Geocoder.init(...);
        Geolocation.getCurrentPosition((position) => {
          this.getCurrentLoc(position.coords.latitude, position.coords.longitude),
            this.setState({
              region: {
                latitude: position.coords.latitude,
                longitude: position.coords.longitude,
              },
              error: null,
            });
        }, (error) => this.setState({ error: error.message }), { enableHighAccuracy: false, timeout: 200000, maximumAge: 1000 });
      }

我想用上述方法确定我的位置,然后用getcurrentloc方法获取地址信息,并计划根据该信息显示附近的一些地方。但是,我无法使该系统按顺序工作,我的地址始终为空。

  getCurrentLoc(lat, longt) {
    Geocoder.from(lat, longt)
      .then(json => {....
        this.setState({...},
          this.getLocIDS(cityName, districtName, neighborhoodName)
        );
      })
      .catch(error => console.warn(error));
  }

这时,我通过地址从数据库中获取地址以提取id信息。

  getLocIDS(cityName, districtName, neighborhoodName) {
    let link = ..;
    fetch(link)
      .then(response => response.json())
      .then(res => {
        this.setState({,,,,,,})
      })
      .catch(error => console.warn(error));
  }

最后,我想捕获场地信息,但是此时数据在数据库中输入为-1。 -1是我的初始状态值。我确定所有方法都可以正常工作,但是由于这些进程没有按顺序运行,因此我的空间搜索方法可以在更新以前功能状态的数据之前起作用。

  getVenueInformation() {
    let link = ...
    fetch(link)
      .then(response => response.json())
      .then(venues => {
          this.setState({
            markers: venues,
            isLoading: false,
          })
      })
  };

数据库输入返回:>>>>> SELECT * FROM mekanlar WHERE mekanlar.mahalle_no="-1";

1 个答案:

答案 0 :(得分:0)

您没有显示如何将信息从一种方法传递到另一种方法。 如果使用this.state进行操作,那就是问题所在。

this.setState将不会同步更新状态。因此,在下一个函数调用中,this.state中的值可能不正确。

为确保数据流正确,更有意义的是显式返回值,即使您在内部执行setState

async componentDidMount() {
    const cityList = await this.getCityList();
    console.log(cityList)
    const location = await this.currentLocation(cityList);
    const venueInformation = await this.getVenueInformation(location);
}