> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Control de errores en CloudScript

> Capture e inspeccione errores de CloudScript de PlayFab mediante bloques try/catch, extraiga códigos de error de la API y supervise los errores no controlados desde el panel de CloudScript.

Este tutorial describe cómo reconocer y controlar errores dentro de sus controladores de CloudScript.

## Identificación

El primer paso es identificar el error. Aunque cada error no capturado se registra y está disponible en la respuesta al autor de la llamada (cliente), puede capturar el error de forma temprana mediante un bloque `try/catch`.

Considere el siguiente fragmento de CloudScript que produce y captura el error.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        let error = ex.apiErrorInfo.apiError.error; // In this case - "InvalidParams"
        let errorCode = ex.apiErrorInfo.apiError.errorCode; // In this case : 1000
    }
}
```

¿Observó cómo se extrajeron los códigos de error dentro del bloque catch? Consulte nuestra [documentación de códigos de error globales de los métodos de la API](/services/playfab/api-references/global-api-method-error-codes) para obtener una lista completa de errores.

<Note>
  El código de error por sí solo es suficiente para identificar el error.
</Note>

## Registro

Cualquier error no controlado se agrega a la respuesta, lo que permite al cliente procesar el problema.

Al mismo tiempo, crea una entrada de error de CloudScript y la agrega a las estadísticas totales disponibles en su panel de CloudScript.

<img src="https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/live-service-management/service-gateway/automation/cloudscript/tutorials/game-manager-cloudscript-dashboard.png?fit=max&auto=format&n=dqv53299jA1M-fNi&q=85&s=b223b50da990d93023537437490b0ed2" alt="Game Manager - Panel de CloudScript que muestra un gráfico de errores de la API" width="1366" height="771" data-path="images/playfab/live-service-management/service-gateway/automation/cloudscript/tutorials/game-manager-cloudscript-dashboard.png" />

Para forzar el registro de la excepción en forma de cadena JSON, use el registro de errores mediante el objeto `log`.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        log.error(ex);
    }
}
```

Por último, puede escribir eventos de título/jugador para su procesamiento posterior mediante análisis.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        server.WriteTitleEvent({
            EventName : 'cs_error',
            Body : ex
        });
    }
}
```

## Recuperación

No siempre es posible recuperarse de los errores. Problemas como `InvalidArguments` no le dejan más opción que notificar el problema al jugador.

Hay un subconjunto de errores en los que se puede aplicar una estrategia de reintento. Los tipos de error *reintentables* se describen en [Códigos de error globales de los métodos de la API](/services/playfab/api-references/global-api-method-error-codes).

Le pedimos que *se asegure* de cumplir los siguientes requisitos al aplicar una estrategia de reintento:

* Con cada reintento, la demora entre reintentos debe *aumentar* exponencialmente. Esto incrementa sus posibilidades de realizar una llamada correcta y evita que su juego sature el servidor de PlayFab con llamadas repetidas (lo que dará lugar a *más* llamadas rechazadas).

* Debe aplicar esta estrategia de reintento de forma *selectiva*, usándola solo para aquellos códigos en los que valga la pena reintentar.

## Error de tiempo de espera de CloudScript

El tiempo de ejecución de las llamadas API de CloudScript está limitado a 4 segundos.

Si el tiempo de ejecución supera los 4 segundos, se genera un error `InternalServerError` y el evento de PlayStream escribe un objeto Logs similar al siguiente:

```
    "Logs":[
        {
        "Level":"Error",
        "Message":"PlayFab API request failure",
        "Data":{
            "request":{
                "PlayFabId":"9437A5ADDAE3012D"
            },
            "error":"Timeout",
            "api":"/Server/GetPlayerSegments"
        }
        }
    ]
```

Si encuentra este error, puede:

* dividir su CloudScript en segmentos de código más pequeños que se ejecuten en menos de 4 segundos.
* Cambiar a [CloudScript con Azure Functions](/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart), que tiene límites de tiempo de espera más largos en algunos casos. Puede ver los límites en la [guía de inicio rápido](/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart#execution-limits).


## Related topics

- [Documentación de administración de servicios en vivo de PlayFab](/es/services/playfab/live-service-management/index.md)
- [Escribir CloudScript personalizado](/es/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript.md)
- [Inicio rápido de CloudScript](/es/services/playfab/live-service-management/service-gateway/automation/cloudscript/quickstart.md)
- [Inicio rápido de Photon](/es/services/playfab/live-service-management/service-gateway/add-ons/photon/quickstart.md)
- [Características de ES6 en CloudScript](/es/services/playfab/live-service-management/service-gateway/automation/cloudscript/es6-features-in-cloudscript.md)
