我正在玩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
答案 0 :(得分:1)
你在PROMISES中所拥有的不是一系列承诺,而是一系列功能。 如果您的目标是执行所有这些功能(可能并行执行),然后使用每个功能的结果执行另一个功能,则可以执行以下操作:
Promise
.map(this.PROMISES, function(f){ f() })
.map(function(_, i){ console.log('OK'+(i+1)) })
.finally(function(){ this.PROMISES.clear(); });
免责声明:使用Bluebird进行测试