仅当我不使用调试器时应用程序崩溃。无法克服这种情况。我该怎么办?

时间:2018-10-25 01:44:20

标签: react-native redux expo

我面临一个非常丑陋的问题,我自己无法克服,我只是不明白。

我的应用程序目的摘要:您可以在附近找到食物并向餐馆老板下订单。

我编写了一个帮助程序功能,该功能可让我根据时间表的“ horarioSemanal”属性来决定是开餐厅还是关餐厅。

此功能以从消防站查询的餐馆作为参数,并在某些条件下决定应得的“不负责任”(可用)财产的价值。

问题是它运行得很好!很好,我通过博览会发布了更改,并且博览会通过无线方式进行了更新,并且我的apptore和google中都有我的应用程序,它可以覆盖所有用户……

在我删除所有更改之前,没有一个用户能够使用我的应用程序,因为我无法检测到该问题。在我的模拟器中,它可以100%运行,但是在部署应用程序时几乎立即崩溃了。

测试,测试和测试我终于遇到了问题,但我仍然想不出该怎么做才能克服这种情况。

当我使用js调试器时,该应用程序完美运行!但是,当我关闭这个新模块时,我写的没有用。

我录制了一个视频,以便您可以在屏幕上看到相同的即时消息:

https://www.youtube.com/watch?v=x9-t8-3XzKc

这是我在分派动作的动作:

import { restaurantesHorarioValidado, validaDisponibilidadComidas } from '../../src/3-ResultadosComponents/Librerias/DisponibilidadHorario';

export const searchResultsInLocation = (ubicacion) => {
  const db = firebase.firestore();
  const docRef = db.collection('Restaurantes').where('abierto', '==', true).where(`zonaOperativa.zonaConsulta.${ubicacion}`, '==', true).get();
  const restaurantesIDS = [];
  return (dispatch) => {
    const holder = [];
    dispatch({
      type: BUSQUEDA_DE_RESULTADOS,
    });
    docRef.then(querySnapshot => {
      querySnapshot.forEach(doc => {
        holder.push(doc.data());
        restaurantesIDS.push(doc.data().id);
      });
      dispatch({
        type: DESCARGA_RESTAURANTES_ABIERTOS,
        restaurantes: restaurantesHorarioValidado(holder)
      });
    })
    .then(() => {
      const comidasRefs = [];
      restaurantesIDS.forEach(restaurant => {
        const ref = db.collection('Comidas').where('restaurantID', '==', `${restaurant}`).get();
        comidasRefs.push(ref);
      });
      return Promise.all(comidasRefs).then(results => {
        const comidas = [];
        results.forEach(resto => {
          resto.forEach(comida => comidas.push(comida.data()));
        });
        dispatch({
          type: DESCARGA_COMIDAS,
          comidas: validaDisponibilidadComidas(comidas, restaurantesHorarioValidado(holder))
        });
      })
      .then(() => dispatch({
            type: BUSQUEDA_DE_RESULTADOS,
          }))
      .catch(err => console.log('error; ', err));
    });
  };
};

这是减速器处理动作的方式:

case DESCARGA_COMIDAS:
  return { ...state, comidas: action.comidas };
case DESCARGA_RESTAURANTES_ABIERTOS:
  return { ...state, restaurantes: action.restaurantes };

这是我编写的模块,我用它来创建动作创建者发送的对象:

const diasDeSemana = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'];
const today = new Date().getDay();

const hoyAbre = (horario) => {
  if (horario) {
    const JornadaHoy = horario.find(jornada => jornada.dia == diasDeSemana[today]);
    return JornadaHoy;
  }
  return false;
};

export const isRestaurantAvalaible = (horario) => {
  const Today = new Date();

  if (hoyAbre(horario)) {
    //Si el restaurant abre hoy
      //Evalua si está abierto
    const horarioApertura = () => {
      const nuevoDia = new Date(`${Today.getFullYear()}, ${Today.getMonth() + 1} ${Today.getDate()} ${hoyAbre(horario).horario.apertura}:00`);
      return nuevoDia;
    };

    const horarioCierre = () => {
      //Si horario de cierre es hoy
      const nuevoDia = new Date(`${Today.getFullYear()}, ${Today.getMonth() + 1} ${Today.getDate()} ${hoyAbre(horario).horario.cierre}:00`);
      //Si el horario de cierre de hoy es pasado las 00:00
      const cierraTomorrow = new Date(`${Today.getFullYear()}, ${Today.getMonth() + 1} ${Today.getDate() + 1} ${hoyAbre(horario).horario.cierre}:00`);

      if (nuevoDia.getHours() <= 8) {
        return cierraTomorrow;
      }
      return nuevoDia;
    };

    const isNowOpen = Today.getTime() >= horarioApertura().getTime();

    const isNowClosed = Today.getTime() >= horarioCierre().getTime();

    //Si está abierto
    if (isNowOpen && !isNowClosed) {
      return { estado: 'abierto' };
    }

    //Si abre mas rato
    if (hoyAbre(horario) && (Today.getTime() < horarioApertura())) {
      return { estado: 'abre pronto', horarioApertura: horarioApertura() };
    }

    //Si ya cerró
    if (isNowOpen && isNowClosed) {
      return { estado: 'ya cerro', horarioCierre: horarioCierre() };
    }
  }

  //Si hoy no abre
  if (!hoyAbre(horario)) {
    return { estado: 'No abre hoy' };
  }
};

export const restaurantesHorarioValidado = (restaurantes) => {
  const restaurantesModificados = restaurantes.map(restaurant => {
    return { ...restaurant, disponible: isRestaurantAvalaible(restaurant.horarioSemanal) };
  });
  const restaurantesAbiertos = restaurantesModificados.filter(restaurant => restaurant.disponible.estado == 'abierto');
  const restaurantesProximosAbrir = restaurantesModificados.filter(restaurant => restaurant.disponible.estado == 'abre pronto');
  const restaurantesCerrados = restaurantesModificados.filter(restaurant => restaurant.disponible.estado == ('ya cerro' || 'No abre hoy'));

  return [...restaurantesAbiertos, ...restaurantesProximosAbrir, ...restaurantesCerrados];
};

export const validaDisponibilidadComidas = (comidas, restaurantes) => {
  //Se le agrega la propiedad "disponible" del restaurant dueño
  const comidasModificadas = comidas.map(comida => {
    const Owner = restaurantes.find(restaurant => restaurant.id == comida.restaurantID);
    return { ...comida, disponible: Owner.disponible };
  });

  const comidasDisponibles = comidasModificadas.filter(comida => comida.disponible.estado == 'abierto');
  const comidasProximosAbrir = comidasModificadas.filter(comida => comida.disponible.estado == 'abre pronto');
  const comidasNoDisponibles = comidasModificadas.filter(comida => comida.disponible.estado == ('ya cerro' || 'No abre hoy'));

  return [...comidasDisponibles, ...comidasProximosAbrir, ...comidasNoDisponibles];
};

这是我关闭js调试器后遇到的错误:

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating 'restaurant.disponible.estado')]

Stack trace:
  src/3-ResultadosComponents/Librerias/DisponibilidadHorario.js:65:98 in <unknown>
  src/3-ResultadosComponents/Librerias/DisponibilidadHorario.js:65:62 in restaurantesHorarioValidado
  store/actions/2-ResultadosActions.js:55:50 in <unknown>
  node_modules/promise/setimmediate/core.js:37:14 in tryCallOne
  node_modules/promise/setimmediate/core.js:123:25 in <unknown>
  ...

正如它暗示的那样,promise存在一些错误,我试图使这些功能作为promise工作。错误消失了,但是我没有把物体找回来...

问题是,当调试器打开时,而不是关闭时,它到底如何工作?

我应该怎么做才能恢复生命:(?

非常感谢。

0 个答案:

没有答案