Vue调用方法异步多次

时间:2018-07-02 21:42:01

标签: javascript asynchronous vue.js

我有一个使用加载方法加载项目的组件。

我需要另一个方法来多次调用load方法以加载更大的数据块。

我需要发出异步请求,请等待第一次,然后再运行。

我想我需要建立一个承诺或其他东西,但是我没有这样做。有人对此有很好的解决方案吗?

这是jsfiddle解释我的问题。 https://jsfiddle.net/qa5sm7hj/21/

这是javascript组件本身

new Vue({
  el: '#cmp',
  data: {
    items: []
  },
  methods: {
        loadItems() {
        //pretend this is an http request that fetches data and then push them to items array.
        ['one', 'two', 'three'].forEach(item => {
            this.items.push(item);
      });
    },
    ultraLoadItems() {
      for (var i = 1; i <= 5;i++) {
        //I want to load new items 5 time in a row
        //and wait until each iteration is done.
        this.loadItems();
      }
    }
  }
})

这是HTML

<div id="cmp">
  <div>
    <button @click="ultraLoadItems">Ultra load</button><br>
    <span>{{ items.length }}</span>
    <ul>
      <li v-for="item in items">{{ item }}</li>
    </ul>
  </div>
</div>

1 个答案:

答案 0 :(得分:0)

这是我的解决方案

new Vue({
  el: '#cmp',
  data: {
    items: []
  },
  methods: {
        loadItems() {
        let vm = this;
        return new Promise(function (resolve, reject) {
        ['one', 'two', 'three'].forEach(item => {
          vm.items.push(item);
        });
        resolve();
      })            
    },
    ultraLoadItems() {
        for (var i = 1; i <= 5;i++) {
        this.loadItems();
      }
    }
  }
})