【问题标题】:How can I prevent my array from becoming disordered? (AngularJs)如何防止我的阵列变得混乱? (AngularJs)
【发布时间】:2018-12-29 21:16:10
【问题描述】:

我通过“排序”函数传递了一系列对象并对其进行了正确排序,但是通过使用 $d.resolve(myList) 在 angularjs 中发送承诺,似乎顺序又丢失了。我怎样才能防止这种情况发生?

var deferred = $q.defer();
var requests = $q.all([getValue1(obj), getValue2(obj)]);

requests.then(function (values) {
    var toOrder = _.union($scope.values, values[0], values[1]);
/*
This are values
[
    { name: '11A.1C.8', value: 21 },
    { name: 'F1.8C.10', value: 37 },
    { name: '11A.2C.14', value: 45 },
    { name: '11A.1C.15', value: -12 },
    { name: '99R.963/5C-134-23' },
    { name: '11A.2C.18', value: 37 },
    { name: '11A.2C.17', value: 37 },
    { name: '11A.1C.9', value: 37 },
    { name: 'AAA.BBB.CCC', value: 37 },
    { name: 'F1.8C.10-1', value: 37 },
    { name: '99R.963/5C-134-23-94', value: 37 }
]*/
    deferred.resolve(sort(toOrder));
});
            
function sort(lista) {
    lista.sort(function (a, b) {
        if (a.name > b.name) { return 1; }
        if (a.name < b.name) { return -1; }
        return 0;
      });

      return lista;
}

一切正常,直到结果发送到“解决”。那是订单再次丢失的时候。 我需要帮助!

【问题讨论】:

    标签: arrays angularjs sorting object resolve


    【解决方案1】:

    在使用.then 块时避免使用$q.defer。而是返回值来创建新的 Promise:

    var requests = $q.all([getValue1(obj), getValue2(obj)]);
    
    var newPromise = requests.then(function (values) {
        var sortedValues = sort(values);
        return sortedValues;
    });
    

    array.sort 方法对in-place 进行排序。在排序之前复制是明智的:

    function sort(lista) {
        var copiedLista = lista.concat();
        copiedLista.sort(function (a, b) {
            if (a.name > b.name) { return 1; }
            if (a.name < b.name) { return -1; }
            return 0;
        });
        return copiedLista;
    }
    

    然后从新的promise中提取值:

    newPromise.then(function(sortedValues) {
        console.log(sortedValues);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多