当用户单击actionSheetIOS的选项时,如何保证数据(异步)已准备就绪?

时间:2016-05-18 23:51:37

标签: asynchronous react-native refluxjs

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

我希望我能够很好地解释这一点。此外,我在React / Reflux相对知道,所以我可能完全错过了一些东西。

2 个答案:

答案 0 :(得分:0)

在数据准备好之前,你不能触发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>

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

答案 1 :(得分:0)

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

onPress处理程序如下所示:

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