Javascript 在我的代码中使用承诺?使用不同的对象和Jquery

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

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

这里KillMany是函数,一旦调用它,它将执行array.forEachtryKill; 陈述 它包含一个elemets数组[每当回调调用以从服务器中删除每个元素时,数组中包含100个元素]

在这里,我想在完全完成[Delete of elements]后执行我的代码。必须调用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();

        }
    },

你似乎有点错过了承诺的重点。他们不会停止你的代码。它们允许您干净地路由代码的异步功能。因此,在调用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的内置延迟,因为。

感谢您的回复,这非常有帮助