Javascript 在我的代码中使用承诺?使用不同的对象和Jquery
您好,我正在使用Jquery和ember删除某些元素,我想使用延迟对象停止代码,然后必须执行下一个语句 这里KillMany是函数,一旦调用它,它将执行array.forEachtryKill; 陈述 它包含一个elemets数组[每当回调调用以从服务器中删除每个元素时,数组中包含100个元素] 在这里,我想在完全完成[Delete of elements]后执行我的代码。必须调用myFinalblock回调 请引导我Javascript 在我的代码中使用承诺?使用不同的对象和Jquery,javascript,jquery,arrays,ember.js,promise,Javascript,Jquery,Arrays,Ember.js,Promise,您好,我正在使用Jquery和ember删除某些元素,我想使用延迟对象停止代码,然后必须执行下一个语句 这里KillMany是函数,一旦调用它,它将执行array.forEachtryKill; 陈述 它包含一个elemets数组[每当回调调用以从服务器中删除每个元素时,数组中包含100个元素] 在这里,我想在完全完成[Delete of elements]后执行我的代码。必须调用myFinalblock回调 请引导我 killMany: function(c) { va
killMany: function(c) {
var t = this
, wait = []
, dfd = new $.Deferred();
function keep(tile) {
tile.setProperties({ isSelected: false, isHidden: false });
}
function destroy(tile) {
if (t.get('reports')) {
t.get('reports').removeObject(tile.entity);
}
tile.remove.bind(tile);
}
function tryKill(tile) {
tile.set('isHidden', true);
tile.get('entity').kill()
.then(destroy.bind(null, tile),
keep.bind(null, tile));
}
function myFinalblock(){
this.set('selectedTiles', []);
}
this.set('promptDestroyMany', false);
if (c.response) {
var array = this.get('selectedTiles');
array.forEach(tryKill);
myFinalblock();
}
},
你似乎有点错过了承诺的重点。他们不会停止你的代码。它们允许您干净地路由代码的异步功能。因此,在调用myFinalBlock之前,您需要一种等待所有tryKill调用完成的方法。为此,您首先需要修改tryKill函数以返回其承诺:
function tryKill(tile) {
tile.set('isHidden', true);
return tile.get('entity')
.kill()
.then(destroy.bind(null, tile),
keep.bind(null, tile));
}
然后你可以这样做:
var tiles = this.get('selectedTiles');
$.when.apply($, tiles.map(tryKill))
.then(myFinalBlock)
.done();
另一方面,我建议寻找一个合适的promise库,不要使用jQuery的内置延迟,因为。感谢您的回复,这非常有帮助