这种代码如何简化?

如何实现自定义月份范围,并能简化代码,看起来好蛋疼,先不管接口设计

var totalData = [];

var req1 = $.get(url + '&month=4&year=2017');
var req2 = $.get(url + '&month=3&year=2017');
var req3 = $.get(url + '&month=2&year=2017');
var req4 = $.get(url + '&month=1&year=2017');
var req5 = $.get(url + '&month=12&year=2016');
var req6 = $.get(url + '&month=11&year=2016');
var req7 = $.get(url + '&month=10&year=2016');
var req8 = $.get(url + '&month=9&year=2016');
var req9 = $.get(url + '&month=8&year=2016');
var req10 = $.get(url + '&month=7&year=2016');
var req11 = $.get(url + '&month=6&year=2016');
var req12 = $.get(url + '&month=5&year=2016');
$.when(req1, req2, req3, req4, req5, req6, req7, req8, req9, req10, req11, req12)
    .done(function (data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12) {
        var d1 = data1[0];
        var d2 = data2[0];
        var d3 = data3[0];
        var d4 = data4[0];
        var d5 = data5[0];
        var d6 = data6[0];
        var d7 = data7[0];
        var d8 = data8[0];
        var d9 = data9[0];
        var d10 = data10[0];
        var d11 = data11[0];
        var d12 = data12[0];
        totalData = d1.concat(d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12)
    });
阅读 4.2k
10 个回答

ES6是个好东西:

$.when([
    ...Array(4).fill(1).map((n, i) => $.get(`${url}&month=${i + 1}&year=2017`)),
    ...Array(8).fill(1).map((n, i) => $.get(`${url}&month=${i + 5}&year=2016`))
]).done((data) => {
    totalData = [].concat(...data);
});

没有测试,不过大概就是这么个意思,你自己试试看吧。

用Promise

Promise.all([url, url2, url3].map(function(u){ return $.get(u) })).then(function(results){ 

    var totalData = []
    totalData.concat.apply(totalData, results.map(function(res){ return res[0]}))
 })

for循环

祝你成功

这个最好的难道不是后端改接口, 直接获取2016-05到2017-04, 这样就一个 ajax 请求了。

为什么接口不能传范围? 这个改接口多好?改不了就用for循环

req存个数组不好么。。。

const today = new Date(),
      url = '/get?type=1';
let firstOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 1);
let totalData = [];
$.when([...Array(12).keys()].map(i => {
    firstOfMonth.setMonth(firstOfMonth.getMonth() - 1);
    return $.get(url + `&month=${firstOfMonth.getMonth() + 1}&year=${firstOfMonth.getFullYear()}`);
})).done(function([...arr]) {
    totalData = arr;
    console.log(totalData)
})
var dataParams = ['&month=x&year=x', ...]
var reqs = []
_.each(dataParams, function (item) {
    reqs.push($.get(url + item))
})

$.when.call($.when, reqs).done(function () {
    var data = [];
    _.each(arguments, function (item) {
        data.contact(item[0])
    })
    // do something else
})

设计有问题?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题