How to make async call one by one with async/await?












0















I have two simple async functions:
First:



const first = async () => {
setTimeout(() => {
console.log(1)
},2000);
}


Second:



const second = async () => {
console.log(2);
}


I'm trying to hold second function until first is done. My code:



router.post('/', errorHandler(async (req, res) => {
try {

await first();
await second();

} catch (err) {
console.log(err);
}
})
);


But the second function executing first. How do I have to use await to get what I want? Thank you in advance!










share|improve this question























  • Why dont you use Promises. Just do the initial post followed by 2 then blocks

    – varoons
    Dec 28 '18 at 19:42
















0















I have two simple async functions:
First:



const first = async () => {
setTimeout(() => {
console.log(1)
},2000);
}


Second:



const second = async () => {
console.log(2);
}


I'm trying to hold second function until first is done. My code:



router.post('/', errorHandler(async (req, res) => {
try {

await first();
await second();

} catch (err) {
console.log(err);
}
})
);


But the second function executing first. How do I have to use await to get what I want? Thank you in advance!










share|improve this question























  • Why dont you use Promises. Just do the initial post followed by 2 then blocks

    – varoons
    Dec 28 '18 at 19:42














0












0








0








I have two simple async functions:
First:



const first = async () => {
setTimeout(() => {
console.log(1)
},2000);
}


Second:



const second = async () => {
console.log(2);
}


I'm trying to hold second function until first is done. My code:



router.post('/', errorHandler(async (req, res) => {
try {

await first();
await second();

} catch (err) {
console.log(err);
}
})
);


But the second function executing first. How do I have to use await to get what I want? Thank you in advance!










share|improve this question














I have two simple async functions:
First:



const first = async () => {
setTimeout(() => {
console.log(1)
},2000);
}


Second:



const second = async () => {
console.log(2);
}


I'm trying to hold second function until first is done. My code:



router.post('/', errorHandler(async (req, res) => {
try {

await first();
await second();

} catch (err) {
console.log(err);
}
})
);


But the second function executing first. How do I have to use await to get what I want? Thank you in advance!







javascript async-await es6-promise






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 28 '18 at 19:38









NastroNastro

32210




32210













  • Why dont you use Promises. Just do the initial post followed by 2 then blocks

    – varoons
    Dec 28 '18 at 19:42



















  • Why dont you use Promises. Just do the initial post followed by 2 then blocks

    – varoons
    Dec 28 '18 at 19:42

















Why dont you use Promises. Just do the initial post followed by 2 then blocks

– varoons
Dec 28 '18 at 19:42





Why dont you use Promises. Just do the initial post followed by 2 then blocks

– varoons
Dec 28 '18 at 19:42












1 Answer
1






active

oldest

votes


















3














The problem is it has no way to know when your code is done. If you change the first function to something like the following it should work.



const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}


Basically what this is doing is returning a promise that will resolve after your timeout is done. That way your await will wait until the resolve function gets called.



You could also do something like the following to convert setTimeout to a promise.



const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}


But the biggest problem is you are trying to combine callbacks and promises (await). So at some point you have to convert that callback (setTimeout) into a promise so you can await it.






share|improve this answer



















  • 1





    Thank you! It works

    – Nastro
    Dec 28 '18 at 19:54






  • 1





    Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

    – jib
    Dec 29 '18 at 2:17













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',
autoActivateHeartbeat: false,
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%2f53963527%2fhow-to-make-async-call-one-by-one-with-async-await%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









3














The problem is it has no way to know when your code is done. If you change the first function to something like the following it should work.



const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}


Basically what this is doing is returning a promise that will resolve after your timeout is done. That way your await will wait until the resolve function gets called.



You could also do something like the following to convert setTimeout to a promise.



const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}


But the biggest problem is you are trying to combine callbacks and promises (await). So at some point you have to convert that callback (setTimeout) into a promise so you can await it.






share|improve this answer



















  • 1





    Thank you! It works

    – Nastro
    Dec 28 '18 at 19:54






  • 1





    Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

    – jib
    Dec 29 '18 at 2:17


















3














The problem is it has no way to know when your code is done. If you change the first function to something like the following it should work.



const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}


Basically what this is doing is returning a promise that will resolve after your timeout is done. That way your await will wait until the resolve function gets called.



You could also do something like the following to convert setTimeout to a promise.



const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}


But the biggest problem is you are trying to combine callbacks and promises (await). So at some point you have to convert that callback (setTimeout) into a promise so you can await it.






share|improve this answer



















  • 1





    Thank you! It works

    – Nastro
    Dec 28 '18 at 19:54






  • 1





    Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

    – jib
    Dec 29 '18 at 2:17
















3












3








3







The problem is it has no way to know when your code is done. If you change the first function to something like the following it should work.



const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}


Basically what this is doing is returning a promise that will resolve after your timeout is done. That way your await will wait until the resolve function gets called.



You could also do something like the following to convert setTimeout to a promise.



const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}


But the biggest problem is you are trying to combine callbacks and promises (await). So at some point you have to convert that callback (setTimeout) into a promise so you can await it.






share|improve this answer













The problem is it has no way to know when your code is done. If you change the first function to something like the following it should work.



const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}


Basically what this is doing is returning a promise that will resolve after your timeout is done. That way your await will wait until the resolve function gets called.



You could also do something like the following to convert setTimeout to a promise.



const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}


But the biggest problem is you are trying to combine callbacks and promises (await). So at some point you have to convert that callback (setTimeout) into a promise so you can await it.







share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 28 '18 at 19:45









Charlie FishCharlie Fish

5,48842972




5,48842972








  • 1





    Thank you! It works

    – Nastro
    Dec 28 '18 at 19:54






  • 1





    Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

    – jib
    Dec 29 '18 at 2:17
















  • 1





    Thank you! It works

    – Nastro
    Dec 28 '18 at 19:54






  • 1





    Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

    – jib
    Dec 29 '18 at 2:17










1




1





Thank you! It works

– Nastro
Dec 28 '18 at 19:54





Thank you! It works

– Nastro
Dec 28 '18 at 19:54




1




1





Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

– jib
Dec 29 '18 at 2:17







Simplifies to const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

– jib
Dec 29 '18 at 2:17




















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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53963527%2fhow-to-make-async-call-one-by-one-with-async-await%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

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas