My code scenario is like :-
async function ot(a: any) {
return "outer text " a;
}
async function it() {
return "inner text";
}
function insert() {
it().then(res => {
console.log(res);
ot(res).then(resp => {
console.log(resp);
});
});
}
insert();
insert();
NOTE:- I have called insert() function 2 times
Code output:-
"inner text"
"inner text"
"outer text inner text"
"outer text inner text"
expected output:-
"inner text"
"outer text inner text"
"inner text"
"outer text inner text"
I want to call insert function more then one time at a single time, is there any way to reach it?
Thank you very much in advance
CodePudding user response:
Use then
async function ot(a) {
return "outer text " a;
}
async function it() {
return "inner text";
}
function insert() {
return it().then(res => {
console.log(res);
return ot(res).then(resp => {
console.log(resp);
});
});
}
insert().then(() => insert());
CodePudding user response:
First of all, switch from then to await
async function it(): Promise<string> {
return "inner text";
}
async function ot(a: string): Promise<string> {
return "outer text " a;
}
async function insert(): Promise<void> {
let res = await it();
console.log(res);
let resp = await ot(res);
console.log(resp);
}
insert();
insert();
What you want is to wait for the first function to end before the second starts, being
await insert()
insert()
which is correct but pauses the whole script for the first insert duration
To avoid that you can either
// I probably took that from js minifiers but I always void IIFEs
void async function() {
await insert()
insert()
}()
or
insert().then(() => insert())
or
insert().then(insert) // as insert has no args
CodePudding user response:
You should write
async function insert() {
const res = await it();
console.log(res);
const resp = ot(res);
console.log(resp);
}
or, if you insist on using then chains,
function insert() {
return it().then(res => {
// ^^^^^^
console.log(res);
return ot(res).then(resp => {
// ^^^^^^
console.log(resp);
});
});
}
and then use the promise that insert returns for sequential execution through await
async function main() {
await insert();
await insert();
}
main().catch(console.error);
or through chaining:
insert().then(insert).catch(console.error);
