<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Domi</title>
    <description>The latest articles on DEV Community by Domi (@domiii).</description>
    <link>https://dev.to/domiii</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F143932%2F28c743e4-e889-4c59-b2bd-80a7f0a29ef4.png</url>
      <title>DEV Community: Domi</title>
      <link>https://dev.to/domiii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/domiii"/>
    <language>en</language>
    <item>
      <title>Better (decentralized) Regulation and Protocol for Parental Control?</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Sat, 24 Sep 2022 09:01:37 +0000</pubDate>
      <link>https://dev.to/domiii/better-decentralized-regulation-and-protocol-for-parental-control-1ph0</link>
      <guid>https://dev.to/domiii/better-decentralized-regulation-and-protocol-for-parental-control-1ph0</guid>
      <description>&lt;p&gt;There seem to be more and more discussions on and revalations about how some corners of social media are downright dangerous for kids. This makes me have a few reactions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;That's awful, and:&lt;/li&gt;
&lt;li&gt;Oh no... politicians are going to pass non-sensical regulation on a topic they don't understand.&lt;/li&gt;
&lt;li&gt;But... I like to browse anonymously... I don't want services to be required to verify someone's identity before being able to use it. But I can definitely see it happen, especially in Europe.&lt;/li&gt;
&lt;li&gt;And most importantly: I don't want to re-enact 1984, like they do in China, where facial recognition and id cards must be provided to use all kinds of online services (such as games), so companies (and the gov) can prevent &lt;del&gt;everyone&lt;/del&gt; kids from accessing the internet as a whole or just certain content. Also, I don't trust anyone to keep that type of data safe ever.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I was wondering... If this problem needs to get tackled, can we find a better solution, before panicked politicians take a sledgehammer to solve the problem?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about instead of trusting services to perform identification verification, can we somehow leave it to the parent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To that extent, considering the immense amount of resources that identity verification would cost to begin with, can't that money be used to develop a better parental control mechanism and experience instead? Maybe one that is tied to the computer/phone/device (or even network of devices if they have more than one), rather than being enforced by the provider/company/gov?&lt;br&gt;
I'm thinking, why not implement an open source protocol that works as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The privileged parent can turn on and off certain types of content (e.g. by domain/url/"content flags"/even keywords; e.g. &lt;code&gt;nsfw&lt;/code&gt;, &lt;code&gt;partial nudity&lt;/code&gt;, &lt;code&gt;PG-13&lt;/code&gt; could be "content flags").&lt;/li&gt;
&lt;li&gt;Applications and content providers can opt into that protocol, to check whether something may be accessed or not.&lt;/li&gt;
&lt;li&gt;There would be sensible and maybe crowdsourced default settings, so parents don't have to make the hard decisions on their own (that is similar to how ad-block works afaik)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;E.g. the browser implements the protocol as a "hub"-actor, and websites that want to offer any non-safe or unmoderated content must (over the time frame of implementation, let's say a few years or so) implement the "content provider" actor of the protocol, which communicates to the hub the type of content (could start out as simple as adding a new &lt;code&gt;HTTP&lt;/code&gt; header, or maybe an initial handshake whose result stays cached for a while etc.), to check if it should be served.&lt;/p&gt;

&lt;p&gt;It's just a rough idea that I have been having, but it certainly sounds more appealing than waiting for the next (much worse) iteration of the "Do you want to allow our cookies?" bull.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>news</category>
      <category>security</category>
    </item>
    <item>
      <title>Making React less stupid: automatic `useMemo` and `useCallback` insertions are coming!</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Tue, 26 Jul 2022 20:20:23 +0000</pubDate>
      <link>https://dev.to/domiii/making-react-less-stupid-automatic-usememo-and-usecallback-insertions-are-coming-8ek</link>
      <guid>https://dev.to/domiii/making-react-less-stupid-automatic-usememo-and-usecallback-insertions-are-coming-8ek</guid>
      <description>&lt;p&gt;Is it just me, or is the recently announced &lt;a href="https://reactjs.org/blog/2022/06/15/react-labs-what-we-have-been-working-on-june-2022.html#react-compiler"&gt;optimizing compiler&lt;/a&gt; an absolute treat that removes one of the most annoying aspects of modern React development? It finally takes care of the pesky old question of whether or not to bother adding &lt;code&gt;useMemo&lt;/code&gt; or &lt;code&gt;useCallback&lt;/code&gt; (and it comes with several more goodies).&lt;/p&gt;

&lt;p&gt;The ups and downs of memoizing everything have been discussed again and again, including on &lt;a href="https://www.reddit.com/r/reactjs/search/?q=usememo"&gt;r/reactjs&lt;/a&gt;, more recently, &lt;a href="https://www.reddit.com/r/reactjs/comments/rs25x2/any_downside_to_using_usememo_for_every_single/"&gt;in this thread&lt;/a&gt;. That thread also includes several important comments by &lt;a href="https://www.reddit.com/user/acemarke/"&gt;u/acemarke&lt;/a&gt; on this matter, where amongst others, he shares &lt;a href="https://blog.isquaredsoftware.com/2020/05/blogged-answers-a-mostly-complete-guide-to-react-rendering-behavior/#memoize-everything"&gt;his insightful blog post on "memoizing everything"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Of course, there are trade-offs to be made, but I love the fact that this difficult, and often just downright annoying decision making process of whether or not to add the call can finally be deferred to an automatic process. I for one have always been a big fan of the two, even at the cost of performance in some cases, just for the crucially important (and criminally under-documented) property of upholding &lt;a href="https://www.google.com/search?q=referential+identity+"&gt;referential identity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I can't wait!&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>news</category>
    </item>
    <item>
      <title>[JS Quiz] Guess the Order of Execution (chances of getting this right are slim)</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Tue, 07 Jun 2022 16:27:08 +0000</pubDate>
      <link>https://dev.to/domiii/js-quiz-guess-the-order-of-execution-chances-of-getting-this-right-are-slim-50eh</link>
      <guid>https://dev.to/domiii/js-quiz-guess-the-order-of-execution-chances-of-getting-this-right-are-slim-50eh</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;l()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;r()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;o()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_o&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;


  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;_o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;()]:&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;

&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;r()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;r&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;o()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_o2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;_o2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_o2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;code&gt;test1&lt;/code&gt;, which one is it?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; → &lt;code&gt;l&lt;/code&gt; → &lt;code&gt;o&lt;/code&gt; → &lt;code&gt;x&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;l&lt;/code&gt; → &lt;code&gt;o&lt;/code&gt; → &lt;code&gt;x&lt;/code&gt; → &lt;code&gt;r&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; → &lt;code&gt;o&lt;/code&gt; → &lt;code&gt;x&lt;/code&gt; → &lt;code&gt;l&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For &lt;code&gt;test2&lt;/code&gt;... just run it yourself. The result being "surprising" might be an understatement.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>The Future of Debugging</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Mon, 18 Apr 2022 17:51:22 +0000</pubDate>
      <link>https://dev.to/domiii/what-are-your-thoughts-on-debugging-40dn</link>
      <guid>https://dev.to/domiii/what-are-your-thoughts-on-debugging-40dn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=LhM01DL9dLc"&gt;Talk: The Future of Debugging&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Ignore this ↓, this is not well written jibbajabba - the talk is quite a bit more coherent, and has pretty pictures!)&lt;/p&gt;

&lt;p&gt;Recently I have found myself really enjoying asking all kinds of new types of questions (questions I have not considered in the past), like...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;While trying to find a bug: "What might be three possible 'good' next steps? Which one should I pick and why?"&lt;/li&gt;
&lt;li&gt;After I fixed a "difficult" bug:

&lt;ul&gt;
&lt;li&gt;"Had I known what I know now, would it have taken just as long?"&lt;/li&gt;
&lt;li&gt;"Which step was the hardest? Why?"&lt;/li&gt;
&lt;li&gt;"What can I do to make that hardest step easier for me (or for the next dev) next time around?"&lt;/li&gt;
&lt;li&gt;"If there is such a thing, what kind of tool or method of dynamic analysis could have saved me the most time or pain?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When working on a "difficult" piece of code, even before the first bug rears its ugly head:

&lt;ul&gt;
&lt;li&gt;"How debuggable is this code? Should I make it more debuggable?"&lt;/li&gt;
&lt;li&gt;"What kind of tool could help analyze such code without having to change the code?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...and so on.&lt;/p&gt;

&lt;p&gt;I guess, I have only started asking these types of questions because I have been working on a &lt;a href="https://github.com/Domiii/dbux/"&gt;new type of debugger&lt;/a&gt; (called "Dbux") over the past few years. At the same time, I'm thinking: what is going on in other people's heads?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do you talk about debugging at work (or with other teammates, if any)?&lt;/li&gt;
&lt;li&gt;What happens in your debugging sessions?&lt;/li&gt;
&lt;li&gt;What kind of opinions do you have about debugging or debuggers?&lt;/li&gt;
&lt;li&gt;Are there types of codebases or industries that are more in need of better debugging tools than others?&lt;/li&gt;
&lt;li&gt;If code is not well tested, does debugging not deserve being talked about? If so, at what point does the topic start to deserve our attention, if ever?&lt;/li&gt;
&lt;li&gt;Do you have questions about debugging you would like someone to answer?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  But Why...?
&lt;/h2&gt;

&lt;p&gt;I am posting this with two goals in mind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I am genuinely wondering about what is going in people's heads on this topic (and reply to the best of my ability).&lt;/li&gt;
&lt;li&gt;This post also serves to let people know about my &lt;a href="https://www.codementor.io/events/developer-growth-summit"&gt;talk on this very topic this Thursday&lt;/a&gt; (it's free). I want to extend an invitation to my fellow debuggerheads, as well as to those who are just a little curious. The talk covers what we can expect of debugging, debugging tools and its good friend, the rarely discussed field of "dynamic analysis", as well as the types of questions they can (or maybe will be able to) help us answer. Maybe I'll see a few of you there (or maybe not). Either way, thanks for reading all the way to down here!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>javascript</category>
      <category>discuss</category>
      <category>watercooler</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Brand NEW Kind of DEBUGGER for JavaScript (Dbux: Why? What?)</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Mon, 21 Mar 2022 17:48:59 +0000</pubDate>
      <link>https://dev.to/domiii/a-brand-new-kind-of-debugger-for-javascript-dbux-why-what-1dj7</link>
      <guid>https://dev.to/domiii/a-brand-new-kind-of-debugger-for-javascript-dbux-why-what-1dj7</guid>
      <description>&lt;h2&gt;
  
  
  Intro Video
&lt;/h2&gt;

&lt;p&gt;Dbux is an integrated debugging environment (IDbE) and omniscient debugger for JavaScript runtime analysis.&lt;/p&gt;

&lt;p&gt;The following video:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explains why we need better Debuggers,&lt;/li&gt;
&lt;li&gt;demonstrates all of Dbux's tools with plenty of examples,&lt;/li&gt;
&lt;li&gt;is fully timestamped (if you are impatient, we recommend taking a quick glimpse by skipping around a bunch).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/N9W6rhHMKbA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  On a Personal Note
&lt;/h2&gt;

&lt;p&gt;I have been programming for some 20+ years, in all kinds of languages. And until recently, I could not quite figure out why sometimes even some of the easiest bugs take some 10+ minutes to find.&lt;/p&gt;

&lt;p&gt;It was that frustration that moved me to start this project on 2019/11/16 (2+ years ago). The project has been driven by the wish to better and more intuitively understand what is going on under the hood, not only in the applications that I build myself, but also in all that third-party code that I am making such heavy use of. &lt;/p&gt;

&lt;p&gt;At this point, I feel, this project has started providing some very good answers to those mind-boggling questions I had before. I start to feel a greater sense of clarity when confronting that "dark matter" of debugging, even when Dbux is not available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call to Action
&lt;/h2&gt;

&lt;p&gt;If you are so inclined, please check it out, and just bombard me with any questions, complaints, any kind of feedback. I would greatly appreciate it!&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Domiii/dbux/"&gt;https://github.com/Domiii/dbux/&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://domiii.github.io/dbux/"&gt;https://domiii.github.io/dbux/&lt;/a&gt;&lt;br&gt;
Discord: &lt;a href="https://discord.gg/QKgq9ZE"&gt;https://discord.gg/QKgq9ZE&lt;/a&gt;&lt;br&gt;
Install: &lt;a href="https://marketplace.visualstudio.com/items?itemName=Domi.dbux-code"&gt;https://marketplace.visualstudio.com/items?itemName=Domi.dbux-code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video briefly mentions Henry Lieberman's informal &lt;a href="https://web.media.mit.edu/~lieber/Lieberary/Softviz/CACM-Debugging/CACM-Debugging-Intro.html#Intro"&gt;The Debugging Scandal and What to Do About It&lt;/a&gt;. I strongly recommend the avid reader to check that out as well.&lt;/p&gt;

&lt;p&gt;Also: shout-out to &lt;a href="https://www.replay.io/"&gt;https://www.replay.io/&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit
&lt;/h2&gt;

&lt;p&gt;Lastly, thanks go out to &lt;a href="https://github.com/MiccWan"&gt;Michael&lt;/a&gt; who has been with me from the beginning, and everyone else, who, for a brief period of time, contributed whatever they could!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>news</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Race Conditions and Fallacies of `Promise.all`</title>
      <dc:creator>Domi</dc:creator>
      <pubDate>Fri, 18 Feb 2022 15:14:14 +0000</pubDate>
      <link>https://dev.to/domiii/the-dangling-fallacy-with-promiseall-543n</link>
      <guid>https://dev.to/domiii/the-dangling-fallacy-with-promiseall-543n</guid>
      <description>&lt;h2&gt;
  
  
  What fallacies does &lt;code&gt;Promise.all&lt;/code&gt; have?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all"&gt;Promise.all&lt;/a&gt; is a convinient synchronization mechanism. However, unbeknownst to many, when facing rejections, &lt;code&gt;Promise.all&lt;/code&gt; can cause two big headaches:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upon the first rejection, the promise created with &lt;code&gt;Promise.all&lt;/code&gt; will settle with that first rejection. All its other unsettled promises are now "dangling". This means that code chained/nested in those promises is now running concurrently with all code that is chained after &lt;code&gt;Promise.all&lt;/code&gt;. This can lead to ugly race conditions if you are not aware of and explicitely consider that possibility.&lt;/li&gt;
&lt;li&gt;If you have more than one rejection, any rejection that is not the first, not only is "dangling", but is explicitly muted. The JS engine will not report any of its unhandled rejections, that is not the first.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What about &lt;code&gt;Promise.allSettled&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled"&gt;Promise.allSettled&lt;/a&gt; is not quite as user-friendly and even foregoes promise error/rejection handlers. You have to provide a fulfillment handler and manually loop over the &lt;code&gt;results&lt;/code&gt; array to decipher whether you have any errors at all (i.e. &lt;code&gt;Promise.allSettled(...).then(results =&amp;gt; ...)&lt;/code&gt;). It's OK, if you make sure that you diligently handle &lt;strong&gt;all&lt;/strong&gt; the information, but it makes things quite a bit more convoluted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;I present an alternative to &lt;code&gt;Promise.all&lt;/code&gt; which uses &lt;code&gt;Promise.allSettled&lt;/code&gt; and aggregates all errors.&lt;/p&gt;

&lt;p&gt;NOTE: Just like, &lt;code&gt;Promise.all&lt;/code&gt;, it ignores fulfilled values, in case of any rejection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easy to use alternative to &lt;code&gt;Promise.all&lt;/code&gt; that does not allow dangling, thereby preventing race conditions.&lt;/li&gt;
&lt;li&gt;Reports all errors, not only the first&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Error aggregation mangles error objects into one big string. That can be further improved.&lt;/li&gt;
&lt;li&gt;Promise chain not moving forward on first rejection can slow things down considerably in case the first error happens fast, but the critical path is slow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following code is also available in &lt;a href="https://gist.github.com/Domiii/41c1dc504025e789fd8741f78d3ac528"&gt;this gist&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * Fixes the "dangling problem" of Promise.all.
 *
 * {@link betterPromiseAll}
 * @see https://dev.to/domiii/a-solution-to-the-deep-flaws-of-promiseall-4aon-temp-slug-8454028
 */&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;promiseAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allSettled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rejected&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// NOTE: `AggregateError` seems not too mature YET. It's internal `errors` property is (currently, as of 2/2022) NOT rendered when reported, so we do some manual aggregation for now.&lt;/span&gt;
    &lt;span class="c1"&gt;// throw new AggregateError(errors, 'Promise.allSettled rejections');&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; promise rejections: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`\n  [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;\n------`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/** ###########################################################################
 * some samples
 * ##########################################################################*/&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;runSample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;########&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;FULFILL:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;########&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;REJECT:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// reject&lt;/span&gt;
&lt;span class="nx"&gt;runSample&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;betterPromiseAll&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; 
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// reject&lt;/span&gt;
&lt;span class="nx"&gt;runSample&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;betterPromiseAll&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; 
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// fulfill&lt;/span&gt;
&lt;span class="nx"&gt;runSample&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;betterPromiseAll&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>promise</category>
      <category>programming</category>
      <category>async</category>
    </item>
  </channel>
</rss>
