为什么这个承诺不起作用?

时间:2014-09-17 08:50:07

标签: javascript promise

我正在玩Promise。

这是我的代码:

APC.UTIL.AutoDOM = {
   step: -1,  PROMISES : [],          
   add: function (fun) {      
    this.PROMISES.push (fun);

  },          
  run: function () {      
   this.step = 0;   this.nn   = this.PROMISES.length-1; 
   this.PROMISES.push ( function() {this.end();});      

    Promise.all( this.PROMISES).then (   
     function ( ) { APC.UTIL.AutoDOM.step++; console.log("OK"+APC.UTIL.AutoDOM.step);}   
     ).catch(
     function(err) {    console.log(err);}
     ); 
  },
  end: function () {
     this.PROMISES.clear();


  }                  
  }

并且如此使用:

 APC.UTIL.AutoDOM.add (  function () {console.log("hello1");}   );        
 APC.UTIL.AutoDOM.add (  function () {console.log("hello2");}   );      
 APC.UTIL.AutoDOM.add (  function () {console.log("hello3");}   );      

 APC.UTIL.AutoDOM.run(); 

只能工作一次......

  
    

OK1

  

任何人都可以修复我的代码? TH

1 个答案:

答案 0 :(得分:1)

你在PROMISES中所拥有的不是一系列承诺,而是一系列功能。 如果您的目标是执行所有这些功能(可能并行执行),然后使用每个功能的结果执行另一个功能,则可以执行以下操作:

Promise
.map(this.PROMISES, function(f){ f() })
.map(function(_, i){ console.log('OK'+(i+1)) })
.finally(function(){ this.PROMISES.clear(); });

免责声明:使用Bluebird进行测试