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