jQuery: fadeOut() asynchronous behavior











up vote
0
down vote

favorite












$("button").on("click", function(){
$("div").fadeOut(1000);
console.log("Fade Completed");
});


When above code is executed, "Fade Completed" is logged on the console way before the div has actually faded out.
As per my knowledge, Javascript is single threaded. It executes code line by line. So why is "Fade Completed" logged on first before the div has faded out completely?



Is the above code utilizing asynchronous nature of javascript (i.e parallel browser engines can run alongside the JS Engine)? But had that been the case, the div would have started fading out after clearance of execution stack. So that's not the case as per my understanding.



Kindly elaborate on this behavior.










share|improve this question


























    up vote
    0
    down vote

    favorite












    $("button").on("click", function(){
    $("div").fadeOut(1000);
    console.log("Fade Completed");
    });


    When above code is executed, "Fade Completed" is logged on the console way before the div has actually faded out.
    As per my knowledge, Javascript is single threaded. It executes code line by line. So why is "Fade Completed" logged on first before the div has faded out completely?



    Is the above code utilizing asynchronous nature of javascript (i.e parallel browser engines can run alongside the JS Engine)? But had that been the case, the div would have started fading out after clearance of execution stack. So that's not the case as per my understanding.



    Kindly elaborate on this behavior.










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      $("button").on("click", function(){
      $("div").fadeOut(1000);
      console.log("Fade Completed");
      });


      When above code is executed, "Fade Completed" is logged on the console way before the div has actually faded out.
      As per my knowledge, Javascript is single threaded. It executes code line by line. So why is "Fade Completed" logged on first before the div has faded out completely?



      Is the above code utilizing asynchronous nature of javascript (i.e parallel browser engines can run alongside the JS Engine)? But had that been the case, the div would have started fading out after clearance of execution stack. So that's not the case as per my understanding.



      Kindly elaborate on this behavior.










      share|improve this question













      $("button").on("click", function(){
      $("div").fadeOut(1000);
      console.log("Fade Completed");
      });


      When above code is executed, "Fade Completed" is logged on the console way before the div has actually faded out.
      As per my knowledge, Javascript is single threaded. It executes code line by line. So why is "Fade Completed" logged on first before the div has faded out completely?



      Is the above code utilizing asynchronous nature of javascript (i.e parallel browser engines can run alongside the JS Engine)? But had that been the case, the div would have started fading out after clearance of execution stack. So that's not the case as per my understanding.



      Kindly elaborate on this behavior.







      javascript jquery






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 at 10:02









      Himansh

      325




      325
























          3 Answers
          3






          active

          oldest

          votes

















          up vote
          1
          down vote













          As you can read in the docs http://api.jquery.com/fadeOut/ the function is executed asynchronously and you can wait for it finish by using the 'complete' callback






          share|improve this answer




























            up vote
            1
            down vote













            You have to log in a callback function



            $("button").on("click", function(){
            $("div").fadeOut(1000, function(){
            console.log("Fade Completed");
            });
            });





            share|improve this answer




























              up vote
              0
              down vote













              You have partially answered your question. You are right Javascript is single threaded and executes code line by line in a synchronous way. That's why "Fade completed" is logged out before the animation has actually completed.



              If you want to wait for the animation to complete before executing a code you should provide a callback as a second argument to fadeOut. This callback will be executed after the animation has completed.



              "Callbacks" are a way to implement asynchronocity in Javascript. You can read more here Javascript Asynchronous Programming and Callbacks






              share|improve this answer





















                Your Answer






                StackExchange.ifUsing("editor", function () {
                StackExchange.using("externalEditor", function () {
                StackExchange.using("snippets", function () {
                StackExchange.snippets.init();
                });
                });
                }, "code-snippets");

                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "1"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                convertImagesToLinks: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247612%2fjquery-fadeout-asynchronous-behavior%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes








                up vote
                1
                down vote













                As you can read in the docs http://api.jquery.com/fadeOut/ the function is executed asynchronously and you can wait for it finish by using the 'complete' callback






                share|improve this answer

























                  up vote
                  1
                  down vote













                  As you can read in the docs http://api.jquery.com/fadeOut/ the function is executed asynchronously and you can wait for it finish by using the 'complete' callback






                  share|improve this answer























                    up vote
                    1
                    down vote










                    up vote
                    1
                    down vote









                    As you can read in the docs http://api.jquery.com/fadeOut/ the function is executed asynchronously and you can wait for it finish by using the 'complete' callback






                    share|improve this answer












                    As you can read in the docs http://api.jquery.com/fadeOut/ the function is executed asynchronously and you can wait for it finish by using the 'complete' callback







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Nov 11 at 10:11









                    NielsNet

                    38818




                    38818
























                        up vote
                        1
                        down vote













                        You have to log in a callback function



                        $("button").on("click", function(){
                        $("div").fadeOut(1000, function(){
                        console.log("Fade Completed");
                        });
                        });





                        share|improve this answer

























                          up vote
                          1
                          down vote













                          You have to log in a callback function



                          $("button").on("click", function(){
                          $("div").fadeOut(1000, function(){
                          console.log("Fade Completed");
                          });
                          });





                          share|improve this answer























                            up vote
                            1
                            down vote










                            up vote
                            1
                            down vote









                            You have to log in a callback function



                            $("button").on("click", function(){
                            $("div").fadeOut(1000, function(){
                            console.log("Fade Completed");
                            });
                            });





                            share|improve this answer












                            You have to log in a callback function



                            $("button").on("click", function(){
                            $("div").fadeOut(1000, function(){
                            console.log("Fade Completed");
                            });
                            });






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Nov 11 at 10:15









                            Ouatataz

                            9618




                            9618






















                                up vote
                                0
                                down vote













                                You have partially answered your question. You are right Javascript is single threaded and executes code line by line in a synchronous way. That's why "Fade completed" is logged out before the animation has actually completed.



                                If you want to wait for the animation to complete before executing a code you should provide a callback as a second argument to fadeOut. This callback will be executed after the animation has completed.



                                "Callbacks" are a way to implement asynchronocity in Javascript. You can read more here Javascript Asynchronous Programming and Callbacks






                                share|improve this answer

























                                  up vote
                                  0
                                  down vote













                                  You have partially answered your question. You are right Javascript is single threaded and executes code line by line in a synchronous way. That's why "Fade completed" is logged out before the animation has actually completed.



                                  If you want to wait for the animation to complete before executing a code you should provide a callback as a second argument to fadeOut. This callback will be executed after the animation has completed.



                                  "Callbacks" are a way to implement asynchronocity in Javascript. You can read more here Javascript Asynchronous Programming and Callbacks






                                  share|improve this answer























                                    up vote
                                    0
                                    down vote










                                    up vote
                                    0
                                    down vote









                                    You have partially answered your question. You are right Javascript is single threaded and executes code line by line in a synchronous way. That's why "Fade completed" is logged out before the animation has actually completed.



                                    If you want to wait for the animation to complete before executing a code you should provide a callback as a second argument to fadeOut. This callback will be executed after the animation has completed.



                                    "Callbacks" are a way to implement asynchronocity in Javascript. You can read more here Javascript Asynchronous Programming and Callbacks






                                    share|improve this answer












                                    You have partially answered your question. You are right Javascript is single threaded and executes code line by line in a synchronous way. That's why "Fade completed" is logged out before the animation has actually completed.



                                    If you want to wait for the animation to complete before executing a code you should provide a callback as a second argument to fadeOut. This callback will be executed after the animation has completed.



                                    "Callbacks" are a way to implement asynchronocity in Javascript. You can read more here Javascript Asynchronous Programming and Callbacks







                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Nov 11 at 10:57









                                    Stundji

                                    356211




                                    356211






























                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Stack Overflow!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.





                                        Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                        Please pay close attention to the following guidance:


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247612%2fjquery-fadeout-asynchronous-behavior%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Xamarin.iOS Cant Deploy on Iphone

                                        Glorious Revolution

                                        Dulmage-Mendelsohn matrix decomposition in Python