Как зациклить в зависимости от количества результатов, возвращаемых в ruby

Может быть, это поможет. Длинный, но он работает.

const myModule = {
  state: {
    test: "modulle",
    settings: {
      one: "This is one",
      two: "This is two",
      three: "This is three"
    }
  }
};

const store = new Vuex.Store({
  modules: { myModule }
});

new Vue({
  el: "#app",
  store,
  data() {
    return {
      listContent: [
        {
          name: "1",
          icon: "person",
          value: null
        },
        {
          name: "2",
          icon: "person",
          value: null
        },
        {
          name: "3",
          icon: "person",
          value: null
        }
      ]
    };
  },
  watch:{
    '$store.state.myModule.settings.one':{
        immediate:true,
      handler:function(value){
            this.listContent[0].value = value;
      }
    },
    '$store.state.myModule.settings.two':{
        immediate:true,
      handler:function(value){
            this.listContent[1].value = value;
      }
    },
    '$store.state.myModule.settings.three':{
        immediate:true,
      handler:function(value){
            this.listContent[2].value = value;
      }
    },
  }
});
0
задан Sam 19 January 2019 в 17:40
поделиться

2 ответа

Вы можете использовать цикл while, например:

offset = 0
end_reached = false

while !end_reached
    response1 = External::getdataApi.call({country_ids: 'gb', extras: 'hotel_info', offset: offset})
    response1 = response1.instance_variable_get(:@response)

    # increase offset by 1000
    offset += 1000

    # if result count is different from 1000 means the end was reached, set end_reached var to true so loop ends
    end_reached = true if response1['result'].count != 1000
end

или цикл until, например:

offset = 0
end_reached = false

until end_reached
    response1 = External::getdataApi.call({country_ids: 'gb', extras: 'hotel_info', offset: offset})
    response1 = response1.instance_variable_get(:@response)

    # increase offset by 1000
    offset += 1000

    # if result count is different from 1000 means the end was reached, set end_reached var to true so loop ends
    end_reached = true if response1['result'].count != 1000
end

Я предпочитаю последний, потому что думаю это читается лучше

0
ответ дан Paulo Belo 19 January 2019 в 17:40
поделиться

Вы можете использовать метод upto для Integer для достижения этой цели. Ваш код будет выглядеть примерно так:

MAX = 100 # or whatever is reasonable
1.upto(MAX) do |index|
  offset = index * 1000
  response1 = External::getdataApi.call({country_ids: 'gb', extras: 'hotel_info', offset: offset})
  response1 = response1.instance_variable_get(:@response)

  # process response

  break if response1['result'].count != 1000
end

Ruby 2.6 также имеет концепцию бесконечности , и вместо этого вы можете заменить 1.upto(MAX) на: (1..).each, если вы используете это версия.

0
ответ дан Gavin Miller 19 January 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: