在一段时间后中止更新,fetchUpdateAsync()[Expo/React native]

yjghlzjz  于 2023-01-21  发布在  React
关注(0)|答案(1)|浏览(118)
  1. Expo React原生SDK版本:46
    1.平台:安卓/iOS
    1.相关 Package :Expo.Updates
    大家好,我想以编程方式检查新的更新,而不使用app.json中的fallbackToCacheTimeout,它会在应用程序启动时触发新更新的检查,因为这样我就无法放置自定义加载页面。
try{
  const update = await Updates.checkForUpdateAsync();
  if(update.isAvailable){
      await Updates.fetchUpdateAsync();
      await Updates.reloadAsync();
  }else{}
}catch(err){}

但我希望能够在一定时间后中止所有这些调用(因此,连接不好的用户可以使用应用程序,而无需等待很长时间)。我检查了文档,没有找到任何允许这样做的方法。
我不认为这是可能的取消承诺,现在在Javascript,或可能的任何连接?
或者app.json中的“fallbackToCacheTimeout”值会自动应用于Expo API的获取更新调用吗?
英译汉有人知道怎么做吗

9udxz4iz

9udxz4iz1#

首先我假设你已经在app.jsonapp.config.js文件中将updates.checkautomatically字段设置为ON_ERROR_RECOVERY。如果没有,请检查文档。你需要这个的原因是为了避免自动更新,这也会阻止你的应用程序在闪屏上。
现在,为了中止或绕过promise,例如在您的例子中的Updates.fetchUpdateAsync。您基本上可以在setTimeout中抛出一个Error,这样,catch块将被执行,绕过promise。
下面是代码:

try{
  const update = await Updates.checkForUpdateAsync();
  if(update.isAvailable){
      // Throw error after 10 seconds.
      const timeout = setTimeout(() => { throw Error("Unable to fetch updates. Skipping..") }, 10000)

      await Updates.fetchUpdateAsync();

      // Just cancel the above timeout so, no error is thrown.
      clearTimeout(timeout)

      await Updates.reloadAsync();
  }else{}
}catch(err){}

请参考本节以了解在eas更新中使用fallbackToCacheTimeout

相关问题