# async.promise (Compartilhado)

> Roda `handler(resolve, reject)` numa thread nova e faz a thread atual esperar até ele chamar `resolve` ou `reject`. Serve para esperar uma função que responde por callback.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Função Lua
- **Lado**: Compartilhado
- **Categoria**: Tempo e assíncrono
- **URL**: https://wiki.mymp.gg/pt/async.promise

## Sintaxe

```lua
any async.promise(function handler)
```

## Parâmetros

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `handler` | `function` | Função que recebe `resolve` e `reject`. Só a primeira chamada de um dos dois conta. |

## Retorno

Os valores passados a `resolve`. Só funciona dentro de uma thread async. Fora dela, registra um erro e devolve `false`.

## Exemplo

```lua
local function delay(ms)
    return async.promise(function(resolve)
        setTimer(resolve, ms, 1, "done")
    end)
end

async.thread(function()
    local result = delay(500)
    outputDebugString(result)
end)
```

### Atenção

`reject(valor)`, ou um erro dentro de `handler`, vira um erro na thread que espera. Use `pcall` em volta para tratá-lo.

## Veja também

- [async.all (Compartilhado)](https://wiki.mymp.gg/pt/async.all.md): Roda cada função da lista na sua própria thread, todas ao mesmo tempo, e faz a thread atual esperar até todas terminarem.
- [async.thread (Compartilhado)](https://wiki.mymp.gg/pt/async.thread.md): Roda uma função numa thread async nova, na hora. A chamada retorna quando a função termina ou faz a primeira pausa, como async.wait.
- [fetchRemote (Servidor)](https://wiki.mymp.gg/pt/fetchRemote.md): Faz uma requisição HTTP ou HTTPS e entrega a resposta a uma função quando ela chega.
