How to make async call one by one with async/await?
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
add a comment |
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
Why dont you use Promises. Just do the initial post followed by 2 then blocks
– varoons
Dec 28 '18 at 19:42
add a comment |
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
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
javascript async-await es6-promise
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
1
Thank you! It works
– Nastro
Dec 28 '18 at 19:54
1
Simplifies toconst timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
– jib
Dec 29 '18 at 2:17
add a comment |
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
});
}
});
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%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
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.
1
Thank you! It works
– Nastro
Dec 28 '18 at 19:54
1
Simplifies toconst timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
– jib
Dec 29 '18 at 2:17
add a comment |
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.
1
Thank you! It works
– Nastro
Dec 28 '18 at 19:54
1
Simplifies toconst timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
– jib
Dec 29 '18 at 2:17
add a comment |
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.
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.
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 toconst timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
– jib
Dec 29 '18 at 2:17
add a comment |
1
Thank you! It works
– Nastro
Dec 28 '18 at 19:54
1
Simplifies toconst 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
add a comment |
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.
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%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
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
Why dont you use Promises. Just do the initial post followed by 2 then blocks
– varoons
Dec 28 '18 at 19:42