# Function Javascript

{% hint style="success" %}
Com o Floui, você pode utilizar bibliotecas em Node.js nativas ou externas já instaladas no workpsace. Saiba mais como importar ou manipular funções nativas no artigo:  [Bibliotecas disponíveis](/guia/artigos/bibliotecas-disponiveis.md)
{% endhint %}

## Funções reservadas

Algumas funções reservadas do Floui são responsáveis por manipular no contexto de execução o objeto *msg*. Estas funções permitem ao conector *Function Javascript* aplicarem bibliotecas já instaladas no workspace ou manipular informações em tempo de execução.

{% hint style="info" %}
Todas as funções reservadas são assíncronas. Para utilizar o *await* corretamente, ele deve ser usado dentro de uma função declarada como assíncrona (com a palavra-chave async). Essa palavra-chave transforma a função em uma *Promise*, permitindo que o código aguarde a resolução de outra *Promise* antes de continuar sua execução.

Saiba mais sobre funções assíncronas <https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/async_function>
{% endhint %}

{% tabs %}
{% tab title="Parâmetros" %}

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfvYt2A1k3v76Ahoq1jSn2PgAbo9BnEKZjbG-diLdYupE3AuyvhOZRyIcEUnHe7ZRO0-IPJ5WJebZVBj-vmT2qRQ2i2120fq6n6TM-ASuk98ma9Z8iNpew6DtTfBSVTEeYHUOPD?key=yLogrgEbXy0K_a4zmB9ApgKO" alt=""><figcaption><p>Parâmnetros de configuração</p></figcaption></figure>

<table><thead><tr><th width="202">Campo</th><th width="108.66666666666666">Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td>Descrição</td><td>Campo de texto</td><td>Descrição visual do conector no editor de fluxo.</td></tr><tr><td>Código</td><td>Campo de texto</td><td>Permite ao usuário criar blocos de código utilizando a linguagem Javascript.</td></tr><tr><td>Tempo limite de execução (em milissegundos)</td><td>Campo de texto</td><td>Permite adicionar um tempo limite para controlar o tempo máximo em que o código do conector levará para executado. Caso deixado vazio irá limitar em 1000ms (1s).</td></tr></tbody></table>
{% endtab %}

{% tab title="Payload" %}

## Sucesso

Quando a função é executada com sucesso, os dados de retorno são atribuídos ao objeto msg do fluxo de execução, adicione novos atributos para atribuir os valores criados.

```javascript
msg.usuario = {
    nome: 'João',
    nascimento: 2020
};

async function handler(msg) {
    // Obtém o ano atual
    const anoAtual = new Date().getFullYear();

    // Calcula a idade com base no ano de nascimento
    const idade = anoAtual - msg.usuario.nascimento;

    // Adiciona a idade ao objeto msg
    msg.usuario.idade = idade;

    return msg;
}
```

Ao final da execução, seu objeto *msg* terá a seguinte estrutura:

```json
// caminho: msg.usuario
{
  "usuario": {
    "nome": "João",
    "nascimento": 2020,
    "idade": 5
  }
}

```

### Erro

Em casos de erro, um log será registrado no Workspace indicando o id exclusivo do conector e a mensagem de exceção gerada pelo fluxo de integração.

<figure><img src="/files/pYP3KvIbW11q2zctHBS3" alt=""><figcaption><p>Log reportado por não encontrar o atributo <em>data</em> acessado.</p></figcaption></figure>
{% endtab %}

{% tab title="Funções reservadas" %}

### handler(*msg*)

Função utilizada para manipular o objeto msg, que é gerado no contexto da execução do fluxo. Esse objeto contém informações relevantes sobre o estado ou dados processados durante a execução.

Com handler, é possível realizar alterações, validações ou transformações no conteúdo de msg, permitindo personalizar seu comportamento de acordo com as necessidades do fluxo. Ao final, a função retorna o objeto msg, já atualizado com as modificações realizadas.

**Parâmetros**

**msg** (objeto): o objeto gerado pelo contexto do fluxo, que será manipulado ou transformado. Contém dados estruturados que podem variar conforme o fluxo ou integração.

```javascript
async function handler(msg) {

    // seu código aqui

    return msg;
}
```

### await setFlowData( chave, valor)

Cria um objeto no formato **chave-valor**, conhecido como HashTable, armazenando temporariamente na memória. Os dados gravados por meio de setFlowData permanecem disponíveis apenas durante a execução do fluxo, sendo automaticamente descartados ao término do processo. Isso torna a função ideal para armazenar informações transitórias e contextuais necessárias para o fluxo atual, sem a preocupação de gerenciamento ou limpeza manual.

**Parâmetros**

**chave** (string): A chave única que identifica o valor armazenado. Deve ser uma string, clara e descritiva, para facilitar o acesso ao dado posteriormente.

**valor** (qualquer tipo de dado): O valor associado à chave. Pode ser de qualquer tipo (string, número, objeto, array, etc.), desde que seja compatível com o contexto do fluxo.

***

### await getFlowData("chave")

Recupera um valor previamente armazenado com a função setFlowData. Através da chave fornecida, a função busca dentro do objeto chave-valor (HashTable) criado na memória temporária durante a execução do fluxo. Caso a chave não exista, o retorno será undefined.

Os dados acessados por getFlowData são transitórios e estão disponíveis apenas enquanto o fluxo está em execução. Após a conclusão do fluxo, toda a tabela é descartada, garantindo um ambiente de memória limpa e sem resíduos.

**Parâmetros**

**chave** (string): a chave única utilizada para identificar e recuperar o valor armazenado. Deve corresponder exatamente à chave usada no momento da inserção com setFlowData.

***

### await getVar("chave")

Recupera o valor associado a uma variável definida no painel de configuração do fluxo ou uma variável global do Workspace, caso a variável global e do fluxo possuem o mesmo nome, irá capturar a variável do fluxo. Através do nome da variável fornecido, getVar permite acessar valores configurados, facilitando a reutilização de dados dentro do fluxo.

**Parâmetros**

**nomeVariavel** (string): o nome da variável a ser buscada. Deve ser uma string que corresponda exatamente ao nome utilizado no momento da definição da variável.

**Variáveis padrões**

* current\_date
* current\_datetime
* current\_time
* timestamp

<figure><img src="/files/2VTtgGOFLevJwcYXAc6g" alt=""><figcaption><p>Configuração de uma variável local pelo painel do fluxo.</p></figcaption></figure>
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.floui.io/guia/conectores/categorias/conectores-essenciais/function-javascript.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
