Javascript aws appsync和react native发生突变时,应用程序正在崩溃

Javascript aws appsync和react native发生突变时,应用程序正在崩溃,javascript,amazon-web-services,react-native,crash,aws-appsync,Javascript,Amazon Web Services,React Native,Crash,Aws Appsync,我正在开发一个移动应用程序,需要在我的移动缓存中存储20000条记录。 当我从多个表中提取数据时,提取非常好(提取时没有错误) 但当我试图改变这些数据时,我的主要问题是。 我的申请失败了,我不知道为什么。 没有错误是抛出,而我把尝试捕捉块无处不在 请告诉我我有一些选择 这可能是内存问题(我不这么认为,因为我有3GB ram和32GB ROM的更新手机) 这可能是解析器的问题(否,因为我在没有更新函数的情况下进行了更新,它工作得很好) 请提出一些解决方案,因为我在这个问题上花了很多时间 获取数据的

我正在开发一个移动应用程序,需要在我的移动缓存中存储20000条记录。 当我从多个表中提取数据时,提取非常好(提取时没有错误)

但当我试图改变这些数据时,我的主要问题是。 我的申请失败了,我不知道为什么。 没有错误是抛出,而我把尝试捕捉块无处不在

请告诉我我有一些选择

  • 这可能是内存问题(我不这么认为,因为我有3GB ram和32GB ROM的更新手机)
  • 这可能是解析器的问题(否,因为我在没有更新函数的情况下进行了更新,它工作得很好) 请提出一些解决方案,因为我在这个问题上花了很多时间
  • 获取数据的代码

    class Assets extends React.PureComponent {
      componentDidUpdate = async (prevProps) => {
        const { nextTokenForAssets, loadingAssets, networkStatusAssets, loadMoreAssets } = this.props
        /**
         * Asset Pagination
         */
        try{
          if (networkStatusAssets === 7 && !loadingAssets && nextTokenForAssets !== prevProps.nextTokenForAssets ) {
            if (nextTokenForAssets !== null && nextTokenForAssets !== ' ' ) {
              loadMoreAssets()
            }
          }
        }catch(err){
          alert('error in downloading asset')
        }
      }
    
      render = () => {
        const { userPlantId, userPackageId, navigation, userId, nextTokenForAssets, loadingAssets, networkStatusAssets } = this.props
        return (
          // null
          <GetPhotos
            userPlantId={userPlantId}
            userPackageId={userPackageId}
            userId={userId}
            navigation={navigation}
            nextTokenForAssets={nextTokenForAssets}
            loadingAssets={loadingAssets}
            networkStatusAssets={networkStatusAssets}
          />
        )
      }
    }
    
    const GetAsset = compose(
      graphql(GetAssetsList, {
        name: 'AssetsList',
        options: (ownProps) => {
          return {
            fetchPolicy: 'cache-and-network',
            variables: {
              limit: 100,
              nextToken: ' ',
              PLANT_ID: ownProps.userPlantId ? ownProps.userPlantId : ' ',
              PACKAGE_ID: ownProps.userPackageId ? ownProps.userPackageId : ' '
            }
          }
        },
        props: ({ ownProps, AssetsList }) => {
          return ({
            listAssets: AssetsList.listASSETS ? AssetsList.listASSETS.items : [],
            nextTokenForAssets: AssetsList.listASSETS ? AssetsList.listASSETS.nextToken : ' ',
            loadingAssets: AssetsList.loading,
            networkStatusAssets: AssetsList.networkStatus,
            errorInAssetList: AssetsList.error,
            loadMoreAssets: () => {
              AssetsList.fetchMore({
                variables: {
                  limit: 100,
                  nextToken: AssetsList.listASSETS ? AssetsList.listASSETS.nextToken : ' ',
                  PLANT_ID: ownProps.userPlantId ? ownProps.userPlantId : ' ',
                  PACKAGE_ID: ownProps.userPackageId ? ownProps.userPackageId : ' '
                },
                updateQuery: (prevResult, { fetchMoreResult }) => {
                  const newList = fetchMoreResult.listASSETS ? fetchMoreResult.listASSETS.items :[]
                  const prevList = prevResult.listASSETS ? prevResult.listASSETS.items : []
                  const newItems = [
                    ...newList,
                    ...prevList
                  ]
    
                  const newData = {
                    ...prevResult.listASSETS,
                    items: newItems,
                    nextToken: fetchMoreResult.listASSETS ? fetchMoreResult.listASSETS.nextToken : ' '
                  }
                  const finalData = {
                    ...prevResult,
                    listASSETS: newData
                  }
                  return finalData
                }
              })
            }
          })
        }
      })
    )(Assets)
    export default GetAsset
    

    对于存储问题-有人能告诉我移动应用程序中appsync的最大缓存大小是多少吗。appsync以何种形式存储数据。您得不到答案的原因是您的问题质量低下。您在这个问题上做得不够充分,无法来到stackoverflow并发布一个问题。你需要继续读下去。我的建议是,开始处理您的问题,并将其分为不同的步骤,了解哪些步骤会导致您出现问题,哪些步骤可以从问题中删除,然后在stackoverflow上提出一个特定的问题,并剪掉一段代码,以便我们可以轻松地重现您的问题。您为什么要获取20000条记录?任何主要的工作都应该在后端完成。测试你的应用程序只获取100条记录,看看会发生什么。如果可以,重新设计你的应用程序。hi@tiborK它与2000配合得很好records@RkKhanpuriya但不是用20000,对吗?您需要了解移动设备的一些限制。3GB是大量数据,应该存储在后端。你需要多少就拿多少,但不是全部。还有,3GB存储在缓存中?请定义缓存。即使对于台式机,缓存中的3GB数据也太多了。我建议重新设计你的应用程序,学习移动开发的基础。
    import UpdateAsset from '../gqlQueries/UpdateAsset'
    import GetAssetsList from '../gqlQueries/GetAssetsList'
    import Toast from '../components/Toast'
    
    export default async (asset, client, variables ) => {
      try {
        const result = await client.mutate({
          mutation: UpdateAsset,
          variables: asset,
          update: (cache, { data: { updateASSETS } }) => {
            const query = GetAssetsList
            // Read query from cache
            const data = cache.readQuery({ query, variables })
            // Add newly created item to the cache copy
            let filterData = data.listASSETS.items.find(item => item.ASSETS_ID === updateASSETS.ASSETS_ID)
            let newData = { ...filterData,
              ASSETS_NAME : updateASSETS.ASSETS_NAME,
              ASSETS_SHORT_DESCRIPTION : updateASSETS.ASSETS_SHORT_DESCRIPTION,
              ASSETS_LASTMODIFIEDDATE : updateASSETS.ASSETS_LASTMODIFIEDDATE,
              ASSETS_UNABLE_TO_LOCATE : updateASSETS.ASSETS_UNABLE_TO_LOCATE,
              ASSETS_AUDIT_COMPLETED : updateASSETS.ASSETS_AUDIT_COMPLETED,
              CLASSIFICATION_ID : updateASSETS.CLASSIFICATION_ID,
              ASSETS_PARENT_ASSET_ID : updateASSETS.ASSETS_PARENT_ASSET_ID,
              ASSETS_PARENT_ASSET_NAME : updateASSETS.ASSETS_PARENT_ASSET_NAME,
              ASSETS_LASTMODIFIEDBY_ID : updateASSETS.ASSETS_LASTMODIFIEDBY_ID,
              ASSETS_LASTMODIFIEDBY_NAME : updateASSETS.ASSETS_LASTMODIFIEDBY_NAME,
              ASSETS_LATEST_AUDIT: updateASSETS.ASSETS_LATEST_AUDIT,
              ASSETS_LATEST_AUDITOR: updateASSETS.ASSETS_LATEST_AUDITOR
            }
            data.listASSETS.items = data.listASSETS.items.filter(item => item.ASSETS_ID !== updateASSETS.ASSETS_ID)
            data.listASSETS.items.unshift(newData)
            //Overwrite the cache with the new results
            cache.writeQuery({ query, variables, data })
          },
          optimisticResponse: () => ({
            updateASSETS: { ...asset, __typename: 'ASSETS' }
          }),
        })
      } catch (error) {
        Toast('Error: '+ error)
      }
    }