[英]How to chain in series promises
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();
Call resolve inside functions so the promises get resolved 在函数内部调用resolve,从而使promise得以解决
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
或者更好,因为可以继续使用第一承诺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();
You need to resolve a promise otherwise it will not propagate further. 您需要解决一个承诺,否则它不会进一步传播。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise 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');
})
}
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.