Tengo esta saga siendo llamada al abrir una página con dos consolas. Inicie sesión para depurar. Esto me da dos registros que se supone que son similares. Los valores en data[0] se utilizan en una tabla AgGrid. Dos campos son editables en la tabla, estos son nulos en la llamada de red. Sin embargo, si edito los campos en el navegador, antes de expandir console.log, el valor ahora se muestra como lo que ingresé en el campo. Esto sucederá en cualquiera de los registros, por lo que puede registrar el campo como nulo primero y luego como un valor después.
function* saga({ Id }) { try { const response = yield call(get, GET_DATA(Id)); console.log(response.data[0]); console.log(response.data[0]); yield put(fetchDataSuccess(response.data)); } catch (error) { yield put(displayErrorMessage(NOB.ERROR)); } }
¿Se supone que console.log puede cambiar después de imprimirse si cambian las referencias? Eso reduciría un poco su eficiencia para la depuración.
console.log()
es efectivamente asíncrono, y si el valor que está emitiendo es un objeto que cambia poco después de llamar a console.log()
, es probable que lo que realmente obtenga el resultado sea la versión actualizada.
Entonces, respuesta corta a su pregunta, sí.
Si necesita generarlo en el momento del cambio, hay dos medios relativamente fáciles que puede usar para generarlo en esa etapa.
El primero sería simplemente generar un clon. Puedes crear un clon superficial como este:
const objectToOutput; console.log({ ...objectToOutput });
Si necesita un clon profundo, puede obtener una biblioteca o simplemente escribir su propio método.
La segunda opción sería convertirlo primero a JSON. Incluso podría convertir ese JSON nuevamente en un objeto y generarlo si lo desea. Útil para objetos complejos que contienen datos simples (como los que obtendría de una llamada a la API):
const objectToOutput; console.log(JSON.stringify(objectToOutput, null, 2)); // or console.log(JSON.parse(JSON.stringify(objectToOutput)));