# ACTIONS

ACTIONS это главный путь к соединению частей вашего приложения (модулей и плагинов) вместе. Это работает подобно **Event Emitter** только с promises: вы можете вызвать любое событие (**event)** в любой модуль/плагин который имеет для этого события "подписку". И "подписать" (**subscribe)** любой модуль/плагин на любое событие с другого модуля/плагина в любом месте приложения. Каждый ACTIONS в ответ **обязан** вернуть **Promise**.

Как же это работает на практике: представьте что у вас есть два модуля - user и product. **User** хочет получить информацию с модуля **product**.

Прежде всего мы должны подписаться на **product module** для события "получения информации" и отправить какую-то информацию в ответ на событие:

```javascript
ACTIONS.on('product.getInfo', () => {
    return Promise.resolve({ name: 'potato', weight: 300 });
});
```

Следующий шаг это послать событие в **product module** от **user module** для получения ответа с информацией.

```javascript
ACTIONS.send('product.getInfo').then((info) => console.log(info));
```

Если вы хотите передать какие-то параметры в ваше событие - вы можете добавить их как **второй аттрибут**.

```javascript
// product module

ACTIONS.on('product.set', (data) => {
    const newProduct = data;

    return Promise.resolve(newProduct);
});

// user module

ACTIONS.send('product.set', { name: 'tomato' }).then((info) => console.log(info));
```

Также вы можете использовать **async await** для удобства:

```javascript
const tomatoInfo = await ACTIONS.send('product.set', { name: 'tomato' });
```
