gpt4 book ai didi

javascript - 在我的代码中使用 Promises?使用延迟对象和 Jquery

转载 作者:行者123 更新时间:2023-11-28 07:56:12 25 4
gpt4 key购买 nike

您好,我正在使用 Jquery 和 ember 来删除某些元素,我想使用 Deferred 对象来停止代码,然后必须执行下一个语句

这里的KillMany是Function,一旦调用就会执行array.forEach(tryKill);陈述包含一个 elemets 数组[每次回调调用以从服务器删除每个元素时,数组内部包含 100 个元素]

在这里,我想在完全完成[删除元素]后执行我的代码 myFinalblock 回调必须被调用

请指导我

    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();

}
},

最佳答案

你似乎有点忽略了 promise 的重点。他们不会“停止”您的代码。它们允许您干净地路由代码的异步功能。因此,您需要一种方法来等待所有 tryKill 调用完成,然后再调用 myFinalBlock。为此,您首先需要修改 tryKill 函数以返回其 promise :

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 的内置延迟,如 they are known to have a number of problems .

关于javascript - 在我的代码中使用 Promises?使用延迟对象和 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26055766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com