- Electron version: 1.2.3 x64 (same issues in v0.36.11 x64)
- Operating system: Win 8.1 x64

Promises in Electron menu item click handlers don't appear to be executed until the mouse cursor is moved or the page is clicked on. I've put together a very simple [demo app](https://github.com/enlight/electron-menu-promise-delay-demo) to showcase this issue. The app creates a window/app menu where each item sends an IPC message to the renderer process, which in turn displays the message on the index page. Context menus appear to suffer from the same issue. The only potentially related issue I've found so far is #2165.

![demo](https://cloud.githubusercontent.com/assets/233003/16170820/b037e766-3589-11e6-97a1-d33ff5b6b6a5.gif)

The menu items are described below.
### `PromiseFirst` Menu

The first item in this menu sends the IPC message from inside a promise, while the last item sends the message directly. Clicking on the `Ping Promise` item will have no visible effect until the mouse cursor is moved or the page is clicked on.
### `PromiseLast` Menu

The first item in this menu sends the IPC message directly, while the last item sends the message from inside a promise. Oddly enough clicking on the `Ping Promise` item in this menu will in fact have an immediate effect.
### `PromiseLastNotWorking` Menu

This menu is setup exactly the same as the `PromiseLast` menu, but clicking on the `Ping Promise` item in this menu will not have an immediate effect!
### `JustPromises` Menu

This menu only contains items that send IPC messages from inside promises, clicking on either item has no effect until the mouse cursor is moved or the page is clicked on.
### `Workaround` Menu

In this menu the promises within the `click` handlers are wrapped in calls to `setImmediate()` or `process.nextTick()`, this seems to ensure that the promises are executed in a timely manner.

atom/common/node_bindings.cc
node::LoadEnvironment(env);
  mate::EmitEvent(env->isolate(), env->process_object(), "loaded");
}
void NodeBindings::PrepareMessageLoop() {
  DCHECK(!is_browser_ || BrowserThread::CurrentlyOn(BrowserThread::UI));
  
  
  uv_async_init(uv_loop_, &dummy_uv_handle_, UvNoOp);
  
  uv_sem_init(&embed_sem_, 0);
  uv_thread_create(&embed_thread_, EmbedThreadRunner, this);
}
void NodeBindings::RunMessageLoop() {