我将再次提出这个问题,因为我最后一次没有考虑到正确的问题。
假设我在数组中有一组jQuery选择器:
[{menu:'.menu-a',click:'.menu-a-click'},...]
我想迭代这些选择器,如果menu
不存在,那么如果click
存在,则点击...
这就是麻烦开始的地方。我需要单击一次,然后再次单击之前执行超时 - 这允许菜单由另一个脚本构建,第二次单击将隐藏它。
我想使用Promises来规范所有这些点击。这就像建立一连串的鞭炮,然后照亮第一个......但Promise马上执行。我该怎么做?
我可以用普通的旧JS编写代码,但我想学习其他方法。我认为涉及all
或map
的内容。
答案 0 :(得分:1)
这是我想出的。打三脚驴。
var menus=[{id:0},{id:1},{id:2},{id:3}];
function doer(menu){
return new Promise(function called(res,rej){
console.log('click1:'+menu.id);
setTimeout(function(){
if(menu.id===2){return rej(new Error('could not'));}
console.log('click2:'+menu.id);
res(1);// happy
},Math.random()*8000);
});
}
Promise.reduce(menus,function(ctr,cur,i){
return doer(menus[i]).then(function(res,rej){
console.log('happy:',res);
});
},$.when(1)).then(function(){
console.log('everyones done'); //no errors
}).catch(function(eee){
console.log('Error:',eee);
}).finally(function(){
console.log('finally');
});
如果重要的话,这是Bluebird。我不知道Bluebird相当于$.when(1)
。
答案 1 :(得分:0)