# Padrões web

O Azion Runtime executa JavaScript construído sobre padrões web, por isso as APIs nativas de JavaScript, como os objetos `Math` e `JSON`, estão disponíveis para uma function. Para os objetos globais que o runtime define, consulte [Globais](/pt-br/documentacao/devtools/runtime/api-reference/azion-runtime-globals/). Para mais informações sobre a linguagem, consulte [JavaScript reference](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference) na MDN Web Docs.

> **nota**
>
> Com `azion dev`, uma string passada para `setTimeout()` lança um `TypeError` no argumento `callback`, em vez do `EvalError` que uma function com deploy feito lança.

---

## JavaScript nativo e Web APIs

Os objetos nativos de JavaScript e as Web APIs do runtime funcionam juntos em uma mesma function. Uma function faz o parsing do corpo de uma requisição com `JSON`, calcula valores com `Math`, `Date` e `String` e retorna o resultado com `Response`. Para as Web APIs que o Azion Runtime suporta, consulte [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript/). Para as definições padrão dessas APIs, consulte [Web APIs](https://developer.mozilla.org/en-US/docs/Web/API) na MDN Web Docs.

---

## Callbacks de timer

Uma function com deploy feito recusa uma string como callback de `setTimeout()` ou de `setInterval()`. A chamada lança `EvalError: eval not allowed on setTimeout/setInterval parameter`. Passe uma função como callback.

---

## Casos de uso

- Faça o parsing e a serialização de payloads com o objeto `JSON` enquanto as requisições passam por uma function.
- Calcule, formate e transforme dados com os métodos padrão de `Math`, `Date` e `String`.
- Escreva uma lógica portável, teste-a com `azion dev` e confirme-a em uma function com deploy feito. Para as APIs que se comportam de forma diferente em cada lado, consulte [Como o Azion Runtime funciona](/pt-br/documentacao/devtools/runtime/como-funciona/).
- Combine recursos nativos da linguagem com as Web APIs suportadas para montar respostas na infraestrutura distribuída da Azion.

---

## Exemplo

Este handler passa uma string para `setTimeout()`, captura o erro que a chamada lança e retorna o erro como texto da resposta:

```javascript
export default {
  async fetch(request, env, ctx) {
    const result = await new Promise((resolve) => {
      try {
        setTimeout('globalThis.flag = 1', 0);
        setTimeout(() => resolve(`string callback ran: ${globalThis.flag === 1}`), 20);
      } catch (error) {
        resolve(`${error.name}: ${error.message}`);
      }
    });
    return new Response(result);
  },
};
```

Uma function com deploy feito retorna este texto:

```text
EvalError: eval not allowed on setTimeout/setInterval parameter
```

---

## Recursos relacionados

- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): Todas as Web APIs que o Azion Runtime suporta, agrupadas por família.
- [fetch](/pt-br/documentacao/devtools/runtime/api-reference/fetch.md): Como uma function envia uma requisição e lê a resposta.
- [node:timers](/pt-br/documentacao/devtools/runtime/node/timers.md): As funções de timer do Node.js, incluindo os timers baseados em promises.
- [Como o Azion Runtime funciona](/pt-br/documentacao/devtools/runtime/como-funciona.md): Onde `azion dev` difere de uma function com deploy feito, API por API.
