происходит сбой приложения во время мутации в aws-appsync и response-native - PullRequest
3 голосов
/ 06 мая 2019

Я работаю над мобильным приложением, где мне нужно хранить 20000 записей в моем мобильном кэше.выборка велика, пока я получаю данные из нескольких таблиц (без ошибок во время выборки)

, но главная проблема со мной, когда я пытаюсь изменить эти данные.мое приложение потерпело крах, я не знаю почему.ошибка не выдает, в то время как я помещаю попробовать перехватить блок везде

Пожалуйста, предложите мне, у меня есть какой-то вариант для этого

  1. это может быть проблема с памятью (я так не думаю, потому что у меня есть обновление телефонас оперативной памятью 3 ГБ и ПЗУ 32 ГБ)
  2. Это может быть решающей проблемой (нет, потому что я сделал обновление без функции обновления, она работает безупречно), пожалуйста, предложите какое-то решение, так как я потратил намного больше времени на эту проблему.

код для извлечения данных

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

вот мой код мутации -

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)
  }
}
...