react-native async并等待问题

时间:2016-02-19 19:15:17

标签: javascript json asynchronous

我试图使用react native创建一个应用程序 我创建了一些静态类,包含globalDB和localDB,它们包含有关本地数据库和全局数据库(web db)的数据 现在我想比较一些数据,我无法解决我的问题: 我在2个sepereated类中有2个函数,它返回db的数据。 现在我想要的是从它们的函数中获取JSON,但它不起作用,因为函数是异步的,它们需要回调, 有没有选项来获取数据的json? 我的意思是说那些异步函数是: 从globalDB它使用fetch,我不能从函数返回一个json(它返回一个promise) 从localDB我使用react-native-db-models,它返回一个promise而不是json (我希望在localDB中有一个函数,通过执行以下操作将返回整个计数:

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

如果不清楚,那就试着更好地解释一下: 我想创建一个函数来检查本地数据库是否具有与服务器数据库相同的行,所以让我们说这个函数名为checkData() 现在,我有两个类:localDB和globalDB。 在每一个中都有应该返回有关数据的信息的函数, 在localDB中有一些函数:getPeople,getPencils,getCounts 在globalDB中有一些函数:getPeople,getPencils,getCounts。 现在,我想检查checkData(),如果getCounts相等, 我的意思是,生病让json喜欢:

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

在globalDB和localDB中的getCounts中(可能不一样,取决于本地的数据,但这就是我要检查的内容) 现在,我没有成功,因为getCounts函数返回promise。 可以任意1请提出一个解决方案,我怎样才能达到我的目的?

*更新: 使用了mike解决方案,我从globalDB类中获取了数据, 仍然遇到localDB类的问题: 我使用react-native-db-models,并调用一个函数get_all,它需要在参数中进行回调,任何想法如何将它转移到等待和异步?

1 个答案:

答案 0 :(得分:1)

使用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>
    );
  }
});