反应本机异步和等待问题

react-native async and await problems

本文关键字:等待 问题 异步 本机      更新时间:2023-09-26

im 尝试使用 React Native 创建应用程序我创建了一些静态类,包含 globalDB 和 localDB,其中包含有关本地数据库和全局数据库(Web DB)的数据现在我想比较一些数据,但我无法解决我的问题:我在 2 个独立的类中有 2 个函数,它返回了数据库的数据。现在我想要的是从他们的函数中获取一个 JSON,但它不起作用,因为这些函数是异步的,它们需要回调,是否有任何选项可以获取数据的 JSON?我说这些是异步功能的意思是:从全局数据库中它使用 fetch,我无法从函数返回 json(它返回我一个承诺)从本地数据库,我使用 react-native-db-models,它返回给我一个承诺而不是一个 json(我希望在本地数据库中有 1 个函数,它将通过这样做向我返回整个计数:

var objCounts = {};
objCounts.people = this.peopleCounts();
objCounts.example = this.exampleCounts();
etc....
)

如果不清楚,请尝试更好地解释这一点:我想创建一个函数来检查本地数据库是否与服务器数据库具有相同的行,所以假设这个函数称为 checkData()现在,我有 2 个类:localDB 和 globalDB。在每一个函数中,都有应该返回有关数据信息的函数,在本地数据库中有函数:getPeople,getPencils,getCounts在globalDB中有一些函数:getPeople,getPencils,getCounts。现在,我想签入 checkData() 如果 getCount 相等,我的意思是,我得到 JSON 如下:

[
people: "5",
pencils: "6"
]

在 globalDB 和 localDB 中的 getCounts 中(也许不一样,取决于本地数据,但这就是我想检查的)现在,我没有成功做到这一点,因为getCounts函数返回承诺。任何1请提出解决方案,我怎样才能达到我想要的?

*更新:使用迈克解决方案,我从 globalDB 类中获取数据,本地数据库类仍然有问题:IM 使用 react-native-db-models,并调用一个需要在参数中回调的函数get_all,知道如何将其传输到 await 和异步吗?

使用 Promises

Promise.all([
  getPeople(),
  getPencils(),
  getCounts()
]).then(function (results) {
  console.log(results[0]); // people JSON
  console.log(results[1]); // pencils JSON
  console.log(results[2]); // counts JSON
});

使用async await

async function getAll () {
  let people = await getPeople();
  let pencils = await getPencils();
  let counts = await getCounts();
  console.log(people); // people JSON
  console.log(pencils); // pencils JSON
  console.log(counts); // counts JSON
} catch (error) {
  // handle errors
}

react-native-db-models我会尝试这个:(摘自他们的文档...我以前没有使用过它,它可能不起作用)。

var App = React.createClass({
  get_users: async function () {
    try {
      let result = await DB.users.get_all();
      console.log(result);
    } catch (e) {
      console.error(e);
    }
  },
render: function(){
  return (
    <View>
      <Text onPress={this.get_users}> Hello </Text>
    </View>
    );
  }
});