2017-04-24 70 views
0

我想串联承诺,以便那3个承诺执行。我不想嵌套这些功能。我尝试在其中添加一个解决方案,但似乎它在函数内部的所有内容都已完成之前解决。内部功能如何链接串联承诺

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(); 
+0

你为什么不叫决心 – bugwheels94

+1

不关你的承诺不断得到解决(或者拒绝) - 那么,当然什么也没有发生 –

+0

我会在哪里解决?函数里面? – Joe

回答

0

你需要调用“解析”:

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(); 
+0

您是否知道这不会记录fetchToken 3 – bugwheels94

1

通话时解决这样的承诺得到解决

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();

或更好可以用继续第一承诺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();