How do I force a method to wait until a prior method has finished within a lightning controller?












1














In my controller I have an Init function that looks like this



   init: function (cmp, event, helper) {
cmp.set('v.mycolumns', [
{ label: 'Document Name', fieldName: 'Name', type: 'text'},
{ label: 'Document Link', fieldName: 'Community_URL__c', type: 'url', typeAttributes: {label: 'Visit Link', target: '_self' }}
]);
helper.getUser(cmp);
helper.getData(cmp);
helper.getDocumentGroupName(cmp);
helper.getDocumentGroupId(cmp);
helper.getDocumentGroup(cmp);
helper.getObjectById(cmp);
}


Long story short I want to force helper.getObjectById to wait until the prior function helper.getDocumentGroup has completed.



I set an attribute in the getDocumentGroup function and then reference that component attribute in getObjectById. When I debug I can see that the getObjectById is trying to reference the attribute prior to it being set in getDocumentGroup. So they must both be running at the same time rather than in a chain sequence.



How do I say run helper.getDocumentGroup first and then when complete run helper.getObjectbyId next?










share|improve this question



























    1














    In my controller I have an Init function that looks like this



       init: function (cmp, event, helper) {
    cmp.set('v.mycolumns', [
    { label: 'Document Name', fieldName: 'Name', type: 'text'},
    { label: 'Document Link', fieldName: 'Community_URL__c', type: 'url', typeAttributes: {label: 'Visit Link', target: '_self' }}
    ]);
    helper.getUser(cmp);
    helper.getData(cmp);
    helper.getDocumentGroupName(cmp);
    helper.getDocumentGroupId(cmp);
    helper.getDocumentGroup(cmp);
    helper.getObjectById(cmp);
    }


    Long story short I want to force helper.getObjectById to wait until the prior function helper.getDocumentGroup has completed.



    I set an attribute in the getDocumentGroup function and then reference that component attribute in getObjectById. When I debug I can see that the getObjectById is trying to reference the attribute prior to it being set in getDocumentGroup. So they must both be running at the same time rather than in a chain sequence.



    How do I say run helper.getDocumentGroup first and then when complete run helper.getObjectbyId next?










    share|improve this question

























      1












      1








      1







      In my controller I have an Init function that looks like this



         init: function (cmp, event, helper) {
      cmp.set('v.mycolumns', [
      { label: 'Document Name', fieldName: 'Name', type: 'text'},
      { label: 'Document Link', fieldName: 'Community_URL__c', type: 'url', typeAttributes: {label: 'Visit Link', target: '_self' }}
      ]);
      helper.getUser(cmp);
      helper.getData(cmp);
      helper.getDocumentGroupName(cmp);
      helper.getDocumentGroupId(cmp);
      helper.getDocumentGroup(cmp);
      helper.getObjectById(cmp);
      }


      Long story short I want to force helper.getObjectById to wait until the prior function helper.getDocumentGroup has completed.



      I set an attribute in the getDocumentGroup function and then reference that component attribute in getObjectById. When I debug I can see that the getObjectById is trying to reference the attribute prior to it being set in getDocumentGroup. So they must both be running at the same time rather than in a chain sequence.



      How do I say run helper.getDocumentGroup first and then when complete run helper.getObjectbyId next?










      share|improve this question













      In my controller I have an Init function that looks like this



         init: function (cmp, event, helper) {
      cmp.set('v.mycolumns', [
      { label: 'Document Name', fieldName: 'Name', type: 'text'},
      { label: 'Document Link', fieldName: 'Community_URL__c', type: 'url', typeAttributes: {label: 'Visit Link', target: '_self' }}
      ]);
      helper.getUser(cmp);
      helper.getData(cmp);
      helper.getDocumentGroupName(cmp);
      helper.getDocumentGroupId(cmp);
      helper.getDocumentGroup(cmp);
      helper.getObjectById(cmp);
      }


      Long story short I want to force helper.getObjectById to wait until the prior function helper.getDocumentGroup has completed.



      I set an attribute in the getDocumentGroup function and then reference that component attribute in getObjectById. When I debug I can see that the getObjectById is trying to reference the attribute prior to it being set in getDocumentGroup. So they must both be running at the same time rather than in a chain sequence.



      How do I say run helper.getDocumentGroup first and then when complete run helper.getObjectbyId next?







      lightning-aura-components javascript promises






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 6 hours ago









      Joseph U.

      322212




      322212






















          1 Answer
          1






          active

          oldest

          votes


















          2














          You use Promises if you need asynchronous code to appear synchronous. From a practical standpoint, that means you write something like this:



          helper.getUser(cmp)
          .then(() => helper.getData(cmp))
          .then(() => helper.getDocumentGroupName(cmp))
          .then(() => helper.getDocumentGroupId(cmp))
          .then(() => helper.getDocumentGroup(cmp))
          .then(() => helper.getObjectById(cmp))
          .catch(error => helper.displayError(error));


          Each method returns a Promise, like this:



          getData: function(cmp) {
          return new Promise(
          $A.getCallback((resolve, reject) => {
          // your logic goes here
          })
          );
          }


          Each time you call the server, the area where "your logic goes here" should call either resolve or reject. On resolve, you go to the next promise. On reject, your code goes to the catch statement, and you can display the error. You can consolidate this down further if you like, but this is the general pattern you'd use to make sure things are called in order. You should only do this for items that actually matter, of course, since there is a performance penalty for hitting the server frequently like this.



          Also, see this question for more info.






          share|improve this answer





















            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "459"
            };
            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',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            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%2fsalesforce.stackexchange.com%2fquestions%2f244998%2fhow-do-i-force-a-method-to-wait-until-a-prior-method-has-finished-within-a-light%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            You use Promises if you need asynchronous code to appear synchronous. From a practical standpoint, that means you write something like this:



            helper.getUser(cmp)
            .then(() => helper.getData(cmp))
            .then(() => helper.getDocumentGroupName(cmp))
            .then(() => helper.getDocumentGroupId(cmp))
            .then(() => helper.getDocumentGroup(cmp))
            .then(() => helper.getObjectById(cmp))
            .catch(error => helper.displayError(error));


            Each method returns a Promise, like this:



            getData: function(cmp) {
            return new Promise(
            $A.getCallback((resolve, reject) => {
            // your logic goes here
            })
            );
            }


            Each time you call the server, the area where "your logic goes here" should call either resolve or reject. On resolve, you go to the next promise. On reject, your code goes to the catch statement, and you can display the error. You can consolidate this down further if you like, but this is the general pattern you'd use to make sure things are called in order. You should only do this for items that actually matter, of course, since there is a performance penalty for hitting the server frequently like this.



            Also, see this question for more info.






            share|improve this answer


























              2














              You use Promises if you need asynchronous code to appear synchronous. From a practical standpoint, that means you write something like this:



              helper.getUser(cmp)
              .then(() => helper.getData(cmp))
              .then(() => helper.getDocumentGroupName(cmp))
              .then(() => helper.getDocumentGroupId(cmp))
              .then(() => helper.getDocumentGroup(cmp))
              .then(() => helper.getObjectById(cmp))
              .catch(error => helper.displayError(error));


              Each method returns a Promise, like this:



              getData: function(cmp) {
              return new Promise(
              $A.getCallback((resolve, reject) => {
              // your logic goes here
              })
              );
              }


              Each time you call the server, the area where "your logic goes here" should call either resolve or reject. On resolve, you go to the next promise. On reject, your code goes to the catch statement, and you can display the error. You can consolidate this down further if you like, but this is the general pattern you'd use to make sure things are called in order. You should only do this for items that actually matter, of course, since there is a performance penalty for hitting the server frequently like this.



              Also, see this question for more info.






              share|improve this answer
























                2












                2








                2






                You use Promises if you need asynchronous code to appear synchronous. From a practical standpoint, that means you write something like this:



                helper.getUser(cmp)
                .then(() => helper.getData(cmp))
                .then(() => helper.getDocumentGroupName(cmp))
                .then(() => helper.getDocumentGroupId(cmp))
                .then(() => helper.getDocumentGroup(cmp))
                .then(() => helper.getObjectById(cmp))
                .catch(error => helper.displayError(error));


                Each method returns a Promise, like this:



                getData: function(cmp) {
                return new Promise(
                $A.getCallback((resolve, reject) => {
                // your logic goes here
                })
                );
                }


                Each time you call the server, the area where "your logic goes here" should call either resolve or reject. On resolve, you go to the next promise. On reject, your code goes to the catch statement, and you can display the error. You can consolidate this down further if you like, but this is the general pattern you'd use to make sure things are called in order. You should only do this for items that actually matter, of course, since there is a performance penalty for hitting the server frequently like this.



                Also, see this question for more info.






                share|improve this answer












                You use Promises if you need asynchronous code to appear synchronous. From a practical standpoint, that means you write something like this:



                helper.getUser(cmp)
                .then(() => helper.getData(cmp))
                .then(() => helper.getDocumentGroupName(cmp))
                .then(() => helper.getDocumentGroupId(cmp))
                .then(() => helper.getDocumentGroup(cmp))
                .then(() => helper.getObjectById(cmp))
                .catch(error => helper.displayError(error));


                Each method returns a Promise, like this:



                getData: function(cmp) {
                return new Promise(
                $A.getCallback((resolve, reject) => {
                // your logic goes here
                })
                );
                }


                Each time you call the server, the area where "your logic goes here" should call either resolve or reject. On resolve, you go to the next promise. On reject, your code goes to the catch statement, and you can display the error. You can consolidate this down further if you like, but this is the general pattern you'd use to make sure things are called in order. You should only do this for items that actually matter, of course, since there is a performance penalty for hitting the server frequently like this.



                Also, see this question for more info.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 3 hours ago









                sfdcfox

                247k11188424




                247k11188424






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Salesforce Stack Exchange!


                    • 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%2fsalesforce.stackexchange.com%2fquestions%2f244998%2fhow-do-i-force-a-method-to-wait-until-a-prior-method-has-finished-within-a-light%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

                    Plaza Victoria

                    In PowerPoint, is there a keyboard shortcut for bulleted / numbered list?

                    How to put 3 figures in Latex with 2 figures side by side and 1 below these side by side images but in...