How do I force a method to wait until a prior method has finished within a lightning controller?
Clash Royale CLAN TAG#URR8PPP
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
add a comment |
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
add a comment |
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
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
lightning-aura-components javascript promises
asked Dec 29 '18 at 20:58
Joseph U.Joseph U.
341212
341212
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Dec 29 '18 at 23:04
sfdcfoxsfdcfox
249k11191426
249k11191426
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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