{"action":"created","issue":{"url":"https://api.github.com/repos/frontendbr/forum/issues/839","repository_url":"https://api.github.com/repos/frontendbr/forum","labels_url":"https://api.github.com/repos/frontendbr/forum/issues/839/labels{/name}","comments_url":"https://api.github.com/repos/frontendbr/forum/issues/839/comments","events_url":"https://api.github.com/repos/frontendbr/forum/issues/839/events","html_url":"https://github.com/frontendbr/forum/issues/839","id":278825138,"number":839,"title":"Como verificar se uma promise já foi resolvida","user":{"login":"robsonbittencourt","id":1248602,"avatar_url":"https://avatars1.githubusercontent.com/u/1248602?v=4","gravatar_id":"","url":"https://api.github.com/users/robsonbittencourt","html_url":"https://github.com/robsonbittencourt","followers_url":"https://api.github.com/users/robsonbittencourt/followers","following_url":"https://api.github.com/users/robsonbittencourt/following{/other_user}","gists_url":"https://api.github.com/users/robsonbittencourt/gists{/gist_id}","starred_url":"https://api.github.com/users/robsonbittencourt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/robsonbittencourt/subscriptions","organizations_url":"https://api.github.com/users/robsonbittencourt/orgs","repos_url":"https://api.github.com/users/robsonbittencourt/repos","events_url":"https://api.github.com/users/robsonbittencourt/events{/privacy}","received_events_url":"https://api.github.com/users/robsonbittencourt/received_events","type":"User","site_admin":false},"labels":[{"id":319789303,"url":"https://api.github.com/repos/frontendbr/forum/labels/JavaScript","name":"JavaScript","color":"fbca04","default":false},{"id":371544136,"url":"https://api.github.com/repos/frontendbr/forum/labels/[D%C3%BAvida]","name":"[Dúvida]","color":"fef2c0","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2017-12-03T22:04:06Z","updated_at":"2017-12-05T12:53:26Z","closed_at":null,"author_association":"NONE","body":"Meu conhecimento sobre promises é intermediário, e hoje cai em um problema novo. Já cheguei em uma possível solução, mas pensei em trazer para cá, pois acredito que a solução não foi muito boa. Se alguém ver uma forma melhor de resolver o problema, por favor poste aqui. Obrigado.\r\n\r\n**Problema**\r\n\r\n_Cenário 1 - Promise resolve rápido_\r\n- Faz a chamada assíncrona em um ponto do código. \r\n- Em outro ponto verifica se a promise já esta resolvida\r\n- A promise já está resolvida, executa o callback de sucess\r\n\r\n_Cenário 2 - Promise demora a responder_\r\n- Faz a chamada assíncrona em um ponto do código. \r\n- Em outro ponto verifica se a promise já esta resolvida\r\n- A promise não está resolvida ainda\r\n  - **Espera pelo menos 3 segundos para verificar novamente. Se ela resolver antes não quero saber o resultado, somente depois de 3 segundos.**\r\n   - Depois de 3 segundos verifica novamente se a promise foi resolvida e executa o callback de sucesso quando ela resolver.\r\n\r\n**Solução**\r\nhttps://jsfiddle.net/robsonbittencourt/p3fhu0fb/1/\r\n\r\n**Dúvida**\r\nComo pode ser visto no jsfiddle o seguinte trecho\r\n\r\n```javascript\r\nlet jaExecutou = false;\r\n\r\noutputPromise.then(function(result) {\r\n   jaExecutou = true;\r\n});\r\n\r\nif (jaExecutou) {\r\n   log('executou rápido...');\r\n   return;\r\n} \r\n```\r\n\r\né executado de forma assíncrona. Ou seja mesmo que a promise já esteja resolvida neste ponto, a linha seguinte a este trecho, já é executada antes da linha que está dentro do then, e não entra no if. Sei que estou misturando código assíncrono com síncrono, porém neste caso específico a situação é exatamente esta.\r\n\r\nPor conta disso a solução que encontrei foi colocar um setTimeout com um valor muito baixo, no código que vem depois desta verificação da promise. \r\n\r\nA dúvida é se teria alguma forma síncrona de fazer isso para evitar o uso deste setTimeout?\r\n\r\nPara realizar testes alterem o valor passado para a função `doSomethingAsync` colocando 0 por exemplo."},"comment":{"url":"https://api.github.com/repos/frontendbr/forum/issues/comments/349295629","html_url":"https://github.com/frontendbr/forum/issues/839#issuecomment-349295629","issue_url":"https://api.github.com/repos/frontendbr/forum/issues/839","id":349295629,"user":{"login":"LFeh","id":3603793,"avatar_url":"https://avatars0.githubusercontent.com/u/3603793?v=4","gravatar_id":"","url":"https://api.github.com/users/LFeh","html_url":"https://github.com/LFeh","followers_url":"https://api.github.com/users/LFeh/followers","following_url":"https://api.github.com/users/LFeh/following{/other_user}","gists_url":"https://api.github.com/users/LFeh/gists{/gist_id}","starred_url":"https://api.github.com/users/LFeh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LFeh/subscriptions","organizations_url":"https://api.github.com/users/LFeh/orgs","repos_url":"https://api.github.com/users/LFeh/repos","events_url":"https://api.github.com/users/LFeh/events{/privacy}","received_events_url":"https://api.github.com/users/LFeh/received_events","type":"User","site_admin":false},"created_at":"2017-12-05T12:53:26Z","updated_at":"2017-12-05T12:53:26Z","author_association":"OWNER","body":":clap :clap :clap"}}
{"actor":{"display_login":"LFeh"}}