【问题标题】:How do I guarantee the data (async) is ready when the user clicks on an option of an actionSheetIOS?当用户单击 actionSheetIOS 的选项时,如何保证数据(异步)准备就绪?
【发布时间】:2016-09-15 15:53:42
【问题描述】:

我正在使用 React Native 和 Reflux 开发一个 IOS 应用程序。当用户打开某个 actionSheetIOS 时,我触发了一个导致商店发出异步请求的操作。存储保留返回的所有数据实例的集合,并将所有数据传递给订阅该数据集的所有视图。但是,由于 actionSheet 的选项之一需要该请求返回的数据,因此我不能保证当用户单击该选项时数据将准备就绪。当用户单击 actionSheetIOS 的选项时,如何保证数据(异步)准备就绪?

我希望我能够很好地解释这一点。另外,我对 React/Reflux 比较了解,所以我可能完全遗漏了一些东西。

【问题讨论】:

    标签: asynchronous react-native refluxjs


    【解决方案1】:

    在数据准备好之前不能触发ActionSheetIOS吗?像这样的...

    <TouchableOpacity
      onPress={() => {
               // call the async method first
               runSomeAsyncMethod()
               .then((data) => {
                 // wait until the method finishes before triggering ActionSheetIOS
                 ActionSheetIOS.showActionSheetWithOptions({
                  options: BUTTONS,
                  cancelButtonIndex: CANCEL_INDEX,
                  destructiveButtonIndex: DESTRUCTIVE_INDEX,
                  },
                  (buttonIndex) => {
                    this.setState({ clicked: BUTTONS[buttonIndex] });
                  });
                }
              }}
    >
      <Text>Click Me!</Text>
    </TouchableOpacity>

    这是假设你的方法是一个承诺......但你应该明白这一点。

    【讨论】:

    • 谢谢布拉德,这是一个很好的建议。我会尝试这个来看看它是怎么回事,但是这个实现可能会减慢 ActionSheet 提供的非异步选项(当用户不会点击该选项时,API 请求很慢)。此外,调用的异步函数是通过不直接响应该视图的回流操作。但是,由于请求的数据不是运行应用程序的更大数据集的一部分,我可以更改其请求方式。
    【解决方案2】:

    我发现(到目前为止)最好的方法是返回一个 Promise ,就好像它是请求的数据一样。 Promise 将包含异步请求并使用所需的数据进行解析。

    onPress 处理程序如下所示:

    onPress = {()=>{
      returnedPromise.then((requestData)=>{
        //  do something with requestedData
      }).catch(()=>{
        //  oops.. time to handle the error
      })
    }} 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2019-03-07
      • 2013-02-14
      • 2013-06-12
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多