.then(function) doesn't run function [duplicate]
This question already has an answer here:
How do I return the response from an asynchronous call?
33 answers
I have this userscript for GreaseMonkey. I created a function (A) which calls an other function (B). I want to wait running the A function further and wait for the B function to return. Function B contains a button, so in fact I want A to wait for the button press.
I tried this with the async
and await
but that didn't work for me show I now tried to use the .then()
option. In the then()
I created a function (nextI
) to increase the i
after running function B.
function A(){
var i = 0
while (i < 3){
var data = jsonResponse[i];
var x = data.x;
var y = data.y;
B(x, y).then(
nextI(i)
)
}
)
function B(x, y){
// do some stuff
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
return
});
}
function nextI(i){
return i + 1
}
So I want to pause A until script B is done and I clicked the button.
javascript userscripts
marked as duplicate by Igor, melpomene, Taplar, Community♦ Jan 7 at 11:41
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
|
show 3 more comments
This question already has an answer here:
How do I return the response from an asynchronous call?
33 answers
I have this userscript for GreaseMonkey. I created a function (A) which calls an other function (B). I want to wait running the A function further and wait for the B function to return. Function B contains a button, so in fact I want A to wait for the button press.
I tried this with the async
and await
but that didn't work for me show I now tried to use the .then()
option. In the then()
I created a function (nextI
) to increase the i
after running function B.
function A(){
var i = 0
while (i < 3){
var data = jsonResponse[i];
var x = data.x;
var y = data.y;
B(x, y).then(
nextI(i)
)
}
)
function B(x, y){
// do some stuff
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
return
});
}
function nextI(i){
return i + 1
}
So I want to pause A until script B is done and I clicked the button.
javascript userscripts
marked as duplicate by Igor, melpomene, Taplar, Community♦ Jan 7 at 11:41
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
10
B()
does not return a promise. It actually doesn't return anything
– Taplar
Jan 3 at 17:12
1
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
IfB()
returns the increasedi
, would that solve the problem?
– George
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
Which is it? Do you want to wait forB
to return or for the button to be pressed? Those are very different things.
– melpomene
Jan 3 at 17:17
|
show 3 more comments
This question already has an answer here:
How do I return the response from an asynchronous call?
33 answers
I have this userscript for GreaseMonkey. I created a function (A) which calls an other function (B). I want to wait running the A function further and wait for the B function to return. Function B contains a button, so in fact I want A to wait for the button press.
I tried this with the async
and await
but that didn't work for me show I now tried to use the .then()
option. In the then()
I created a function (nextI
) to increase the i
after running function B.
function A(){
var i = 0
while (i < 3){
var data = jsonResponse[i];
var x = data.x;
var y = data.y;
B(x, y).then(
nextI(i)
)
}
)
function B(x, y){
// do some stuff
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
return
});
}
function nextI(i){
return i + 1
}
So I want to pause A until script B is done and I clicked the button.
javascript userscripts
This question already has an answer here:
How do I return the response from an asynchronous call?
33 answers
I have this userscript for GreaseMonkey. I created a function (A) which calls an other function (B). I want to wait running the A function further and wait for the B function to return. Function B contains a button, so in fact I want A to wait for the button press.
I tried this with the async
and await
but that didn't work for me show I now tried to use the .then()
option. In the then()
I created a function (nextI
) to increase the i
after running function B.
function A(){
var i = 0
while (i < 3){
var data = jsonResponse[i];
var x = data.x;
var y = data.y;
B(x, y).then(
nextI(i)
)
}
)
function B(x, y){
// do some stuff
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
return
});
}
function nextI(i){
return i + 1
}
So I want to pause A until script B is done and I clicked the button.
This question already has an answer here:
How do I return the response from an asynchronous call?
33 answers
javascript userscripts
javascript userscripts
edited Jan 3 at 17:14
George
asked Jan 3 at 17:11
GeorgeGeorge
238
238
marked as duplicate by Igor, melpomene, Taplar, Community♦ Jan 7 at 11:41
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Igor, melpomene, Taplar, Community♦ Jan 7 at 11:41
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
10
B()
does not return a promise. It actually doesn't return anything
– Taplar
Jan 3 at 17:12
1
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
IfB()
returns the increasedi
, would that solve the problem?
– George
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
Which is it? Do you want to wait forB
to return or for the button to be pressed? Those are very different things.
– melpomene
Jan 3 at 17:17
|
show 3 more comments
10
B()
does not return a promise. It actually doesn't return anything
– Taplar
Jan 3 at 17:12
1
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
IfB()
returns the increasedi
, would that solve the problem?
– George
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
Which is it? Do you want to wait forB
to return or for the button to be pressed? Those are very different things.
– melpomene
Jan 3 at 17:17
10
10
B()
does not return a promise. It actually doesn't return anything– Taplar
Jan 3 at 17:12
B()
does not return a promise. It actually doesn't return anything– Taplar
Jan 3 at 17:12
1
1
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
If
B()
returns the increased i
, would that solve the problem?– George
Jan 3 at 17:15
If
B()
returns the increased i
, would that solve the problem?– George
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
Which is it? Do you want to wait for
B
to return or for the button to be pressed? Those are very different things.– melpomene
Jan 3 at 17:17
Which is it? Do you want to wait for
B
to return or for the button to be pressed? Those are very different things.– melpomene
Jan 3 at 17:17
|
show 3 more comments
2 Answers
2
active
oldest
votes
1. Number
is passed by value
Thus, giving i
to nextI
increases a local copy (i.e. the input parameter).
2. B
doesn't return Promise
function B(x, y) {
let button = document.getElementById("button");
// FIX HERE
return new Promise(resolve =>
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('some data')
})
)
}
3. Promise#then
accepts a function
So, B (nextI (i))
isn't correct, but B(() => nextI (i))
.
N. Other issues
There should be other issues there. For example, you're running functions whose return type/value is Promise
in a fire&forget way. Take a look at Promise.all
or Promise.race
.
add a comment |
before using .then()
, you first have to return a promise.
function B(x, y){
return new Promise((resolve, reject) => {
// do something here
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('foo');
});
});
}
take a look https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
They want to return data from within theclick
callback and it might be necessary to explain how to do that.
– creativecreatorormaybenot
Jan 3 at 17:19
1
they can use in the promise ---let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so.then()
will be executed after the button is clicked.
– Vinay Sheoran
Jan 3 at 17:22
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
1. Number
is passed by value
Thus, giving i
to nextI
increases a local copy (i.e. the input parameter).
2. B
doesn't return Promise
function B(x, y) {
let button = document.getElementById("button");
// FIX HERE
return new Promise(resolve =>
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('some data')
})
)
}
3. Promise#then
accepts a function
So, B (nextI (i))
isn't correct, but B(() => nextI (i))
.
N. Other issues
There should be other issues there. For example, you're running functions whose return type/value is Promise
in a fire&forget way. Take a look at Promise.all
or Promise.race
.
add a comment |
1. Number
is passed by value
Thus, giving i
to nextI
increases a local copy (i.e. the input parameter).
2. B
doesn't return Promise
function B(x, y) {
let button = document.getElementById("button");
// FIX HERE
return new Promise(resolve =>
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('some data')
})
)
}
3. Promise#then
accepts a function
So, B (nextI (i))
isn't correct, but B(() => nextI (i))
.
N. Other issues
There should be other issues there. For example, you're running functions whose return type/value is Promise
in a fire&forget way. Take a look at Promise.all
or Promise.race
.
add a comment |
1. Number
is passed by value
Thus, giving i
to nextI
increases a local copy (i.e. the input parameter).
2. B
doesn't return Promise
function B(x, y) {
let button = document.getElementById("button");
// FIX HERE
return new Promise(resolve =>
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('some data')
})
)
}
3. Promise#then
accepts a function
So, B (nextI (i))
isn't correct, but B(() => nextI (i))
.
N. Other issues
There should be other issues there. For example, you're running functions whose return type/value is Promise
in a fire&forget way. Take a look at Promise.all
or Promise.race
.
1. Number
is passed by value
Thus, giving i
to nextI
increases a local copy (i.e. the input parameter).
2. B
doesn't return Promise
function B(x, y) {
let button = document.getElementById("button");
// FIX HERE
return new Promise(resolve =>
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('some data')
})
)
}
3. Promise#then
accepts a function
So, B (nextI (i))
isn't correct, but B(() => nextI (i))
.
N. Other issues
There should be other issues there. For example, you're running functions whose return type/value is Promise
in a fire&forget way. Take a look at Promise.all
or Promise.race
.
answered Jan 3 at 17:24
Matías FidemraizerMatías Fidemraizer
49.7k1285148
49.7k1285148
add a comment |
add a comment |
before using .then()
, you first have to return a promise.
function B(x, y){
return new Promise((resolve, reject) => {
// do something here
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('foo');
});
});
}
take a look https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
They want to return data from within theclick
callback and it might be necessary to explain how to do that.
– creativecreatorormaybenot
Jan 3 at 17:19
1
they can use in the promise ---let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so.then()
will be executed after the button is clicked.
– Vinay Sheoran
Jan 3 at 17:22
add a comment |
before using .then()
, you first have to return a promise.
function B(x, y){
return new Promise((resolve, reject) => {
// do something here
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('foo');
});
});
}
take a look https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
They want to return data from within theclick
callback and it might be necessary to explain how to do that.
– creativecreatorormaybenot
Jan 3 at 17:19
1
they can use in the promise ---let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so.then()
will be executed after the button is clicked.
– Vinay Sheoran
Jan 3 at 17:22
add a comment |
before using .then()
, you first have to return a promise.
function B(x, y){
return new Promise((resolve, reject) => {
// do something here
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('foo');
});
});
}
take a look https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
before using .then()
, you first have to return a promise.
function B(x, y){
return new Promise((resolve, reject) => {
// do something here
let button = document.getElementById("button");
button.addEventListener("click", () => {
console.log("Button clicked.");
resolve('foo');
});
});
}
take a look https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
edited Jan 3 at 17:26
answered Jan 3 at 17:18
Vinay SheoranVinay Sheoran
31339
31339
They want to return data from within theclick
callback and it might be necessary to explain how to do that.
– creativecreatorormaybenot
Jan 3 at 17:19
1
they can use in the promise ---let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so.then()
will be executed after the button is clicked.
– Vinay Sheoran
Jan 3 at 17:22
add a comment |
They want to return data from within theclick
callback and it might be necessary to explain how to do that.
– creativecreatorormaybenot
Jan 3 at 17:19
1
they can use in the promise ---let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so.then()
will be executed after the button is clicked.
– Vinay Sheoran
Jan 3 at 17:22
They want to return data from within the
click
callback and it might be necessary to explain how to do that.– creativecreatorormaybenot
Jan 3 at 17:19
They want to return data from within the
click
callback and it might be necessary to explain how to do that.– creativecreatorormaybenot
Jan 3 at 17:19
1
1
they can use in the promise ---
let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
they can use in the promise ---
let button = document.getElementById("button"); button.addEventListener("click", () => { console.log("Button clicked."); resolve('foo'); });
– Vinay Sheoran
Jan 3 at 17:21
we are resolving promise when the button is clicked, so
.then()
will be executed after the button is clicked.– Vinay Sheoran
Jan 3 at 17:22
we are resolving promise when the button is clicked, so
.then()
will be executed after the button is clicked.– Vinay Sheoran
Jan 3 at 17:22
add a comment |
10
B()
does not return a promise. It actually doesn't return anything– Taplar
Jan 3 at 17:12
1
You cannot return to your function from within a callback.
– creativecreatorormaybenot
Jan 3 at 17:13
If
B()
returns the increasedi
, would that solve the problem?– George
Jan 3 at 17:15
stackoverflow.com/questions/14220321/… I think you need a promise
– sferret
Jan 3 at 17:15
Which is it? Do you want to wait for
B
to return or for the button to be pressed? Those are very different things.– melpomene
Jan 3 at 17:17