Reputation: 675
I would like to chain in series promises so that that in order the 3 promises execute. I don't want to nest the functions. I tried adding a resolve into it, but it seems like it resolves before everything inside of the function is done.
function first(){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 1');
});
return promise;
}
function second(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 2');
});
return promise;
}
function third(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 3');
});
return promise;
}
function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var task1 = first();
var task2 = task1.then(second);
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);
return alltasks;
}
getTokenGroup();
Upvotes: 0
Views: 70
Reputation: 31940
Call resolve inside functions so the promises get resolved
function first() {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 1');
resolve();
});
return promise;
}
function second(item) {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 2');
resolve();
});
return promise;
}
function third(item) {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 3');
resolve();
});
return promise;
}
function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var task1 = first();
var task2 = task1.then(second); // why return new promise
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);
return alltasks;
}
getTokenGroup();
Or better as can continue the first promise using then
function first() {
console.log('fetchToken 1');
}
function second(item) {
console.log('fetchToken 2');
}
function third(item) {
console.log('fetchToken 3');
}
function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var promise = Promise.resolve(0); // create a resolved promise
var task1 = promise.then(first);
var task2 = task1.then(second);
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);
return alltasks;
}
getTokenGroup();
Upvotes: 1
Reputation: 127
you need call "resolve":
function first(){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 1');
resolve(1); //==> call this one, parameter in here is just a sample
});
return promise;
}
function second(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 2');
});
return promise;
}
function third(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 3');
});
return promise;
}
function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var task1 = first();
var task2 = task1.then(second);
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);
return alltasks;
}
getTokenGroup();
Upvotes: 0
Reputation: 22885
You need to resolve a promise otherwise it will not propagate further.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
function first(){
return new Promise(function(resolve, reject){
console.log('fetchToken 1');
resolve('your data');
})
}
Upvotes: 0