【问题标题】:use Promises in my code ?using deffered object and Jquery在我的代码中使用承诺?使用延迟对象和 Jquery
【发布时间】:2023-03-22 21:37:02
【问题描述】:

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

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

这里我想在完全完成 [deletion 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();

        }
    },

【问题讨论】:

    标签: javascript jquery arrays ember.js promise


    【解决方案1】:

    你似乎有点忽略了承诺的意义。他们不会“停止”您的代码。它们允许您干净地路由代码的异步功能。因此,您需要一种方法来等待所有tryKill 调用完成后再调用myFinalBlock。为此,您首先需要修改 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 库,而不是像 they are known to have a number of problems 那样使用 jQuery 的内置延迟。

    【讨论】:

    • 感谢您的回复,对您有很大帮助
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-03-27
    • 2023-03-21
    相关资源
    最近更新 更多