rn redux-offline запрос на удаление данных / кеш - PullRequest
0 голосов
/ 29 июня 2018

только что застрял в настройке реактивных офлайн запросов. Я хочу использовать его для отправки файлов данных и изображений в виде массива base64 вместе с ним, но у меня все получилось, но после этого кэши постоянно растут в день 140 Мб / 4 ч при тестировании на реальном устройстве, что предполагает, что это не должно работать. Чего мне не хватает вообще?

сохранение конфигурации с пользовательским запросом (преобразование изображений в base64)

    offlineConfig2 = {
  ...offlineConfig,
  persistCallback: () => {
    console.log('Rehydratation complete');
  },
  persistOptions: {
    key: 'primary',
    storage:AsyncStorage
  },
  rehydrate: true,
  // @overwrite effect

  effect: (effect, action) => {
    console.log(`Executing effect for ${action.type}:`, effect);
      photoArr = [];
      if (effect.photo)
      photoArr = effect.photo;
      promises = photoArr.map(function(photo){
        return base64 = RNFetchBlob.fs.readFile(photo.key, 'base64')
                    .then((data) => {
                    return data
                    }).catch(err => console.log(err));
      });

      return new Promise(
        function (resolve, reject) {
        Promise.all(promises).then(function(base64Photo) {
        body = effect.body;
        if(Array.isArray(base64Photo) && base64Photo.length > 0) {
          body = Object.assign({photoArr: base64Photo}, body);
        } 
        fetch(effect.url, { // eslint-disable-line
          method: effect.method,
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
            'Authorization': 'Bearer' + effect.token
          },
          body: JSON.stringify(body),
        })
        .then(res => {
          console.log('response', res);
          resolve('ok');
          return res.ok
            ? res.json()
            : Promise.reject(res.text().then(msg => new Error(msg)));
        })
        .catch((error) => {
            reject(new Error(`Unable to retrieve events0.\n${error.message}`));
          }
        );    
      })
      .catch((error)=> {
          reject(new Error(`Unable to retrieve events 1.\n${error.message}`));
        }
      );
    });       
  },
  // @overwrite discard
  discard: (error, action, retries) => {
    console.log(error);
    //return true;
    return retries > 3;
  },
  // @overwrite retry
  retry: (action) => (action.meta.urgent ? 100 : 10000),
  //returnPromises: false,
  /*
  queue: (action) => {
    console.log(action);
  }
  */
  // @overwrite persist
};
export const store = createStore(rootReducer, undefined, offline(offlineConfig2));

Само действие.

export const sendRepairPhotos = (identifier, token, auto_number, kilometers, message, photoPath, photoArray = []) => {
    console.log('send repair photos');
        return ({
            type: REPAIR_PHOTOS,
            //payload: { token },
            meta: {
            offline: {
                effect: { url: global.apiUrl + 'trucks_malfunctions/register', method: 'POST', body: {km: kilometers,
                                                                                                auto_id: auto_number,
                                                                                                identifier: identifier,
                                                                                                message: message
                                                                                            },
                                                                                            photo: photoArray, 
                                                                                            token:token },
            }
            }
        })
};

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

1 Ответ

0 голосов
/ 29 октября 2018

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

При использовании автономного редукса для отправки запросов с изображениями важно удалять изображения, если только данные приложения и кеши не увеличиваются. Что можно сделать с модулями управления файлами, такими как RN fetch blob, rn fs или около того.

...