从Q Promise开始顺序运行

我有这个代码,我希望这两个Promise按顺序运行,结果应该是这样的:

a progress: 20 a progress: 40 a progress: 60 a progress: 80 a progress: 100 a resolve: a b progress: 20 b progress: 40 b progress: 60 b progress: 80 b progress: 100 b resolve: b 

但我得到这个:

 a progress: 20 b progress: undefined a progress: 40 b progress: undefined a progress: 60 b progress: undefined a progress: 80 b progress: undefined a progress: 100 a resolve: a b progress: undefined b progress: 20 b progress: 40 b progress: 60 b progress: 80 b progress: 100 b resolve: b 

这是我的整个代码:

 var a = function(){ return q.Promise(function(resolve, reject, notify){ var percentage = 0; var interval = setInterval(function() { percentage += 20; notify(percentage); if (percentage === 100) { resolve("a"); clearInterval(interval); } }, 500); }); }; var b = function(){ return q.Promise(function(resolve, reject, notify){ var percentage = 0; var interval = setInterval(function() { percentage += 20; notify(percentage); if (percentage === 100) { resolve("b"); clearInterval(interval); } }, 500); }); }; a().then(function(res) { console.log('a resolve: '+res); return b(); }, errorHandler, function(progress){ console.log('a progress: '+progress); }) //call b() .then(function(res){ console.log('b resolve: '+res); }, errorHandler, function(progress){ console.log('b progress: '+progress); }); function errorHandler(err) { console.log('Error Handler:', err); } 

你可以使用Q的链接 。

 a() .then( function(res) { b().then(function(resb) { console.log('b resolve: '+resb); }, errorHandler, function(progress){ console.log('b progress: '+progress); }); }, errorHandler, function(progress){ console.log('a progress: '+progress); }); 

使用fin作品:

 a() .then( function(res) { console.log('a resolve: '+res); }, errorHandler, function(progress){ console.log('a progress: '+progress); }) .fin(function() { b().then(function(res) { console.log('b resolve: '+res); }, errorHandler, function(progress){ console.log('b progress: '+progress); }); }); 

我们来看看原始代码的stream程:

 a().then(function(res) { console.log('a resolve: '+res); return b(); // (0) here we only create promise for 'b' }, errorHandler, function(progress){ console.log('a progress: '+progress); // (1) here Q calls progress's callback }) //call b() .then(function(res){ console.log('b resolve: '+res); // (2) it's called in the end }, errorHandler, function(progress){ console.log('b progress: '+progress); // (1) and here Q calls progress's callback }); 

'b progress:undefined'是因为完全没有进展,但callback被调用。 进度callback被调用,而承诺没有满足。 当你回复或致电“解决scheme”时,Promise得到全面满足。