Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.5k views
in Technique[技术] by (71.8m points)

JavaScript 数组有内容但 length === 0?

代码如下,fetchData 通过 http 请求获取数据并放入 provinceList,但 provinceList.length 等于 0。通过控制台输出相关信息,provinceList 中应该是有内容的。

代码均位于 vue 文件中。

changeCountry(val) {
      this.fetchData(
        this.provinceList,
        `${this.API.province}/${this.countryCode}`,
      );
      this.provinceFlag = true;

      const prolist = this.provinceList;
      this.noProvince = (prolist.length === 0);
      console.log('changeCountry: 1 ', prolist);
      console.log('changeCountry: len ', prolist.length, 'noProvince ', this.noProvince);
      this.$emit('addressSelect', val);
    }
    
    fetchData(array, url) {
      this.axios
        .get(url)
        .then((resp) => {
          if (resp.status === 200) {
            const items = JSON.parse(JSON.stringify(resp.data.data));
            array.splice(0, array.length, ...items);
          } else {
            console.log(resp.status);
          }
        })
        .catch((err) => {
          console.log(err);
        });
    },

image


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

楼上的几位说的都对,改成这样就好了:

changeCountry(val) {
      console.log(1);
      this.fetchData(
        this.provinceList,
        `${this.API.province}/${this.countryCode}`,
        () => {
          console.log(5);
          this.provinceFlag = true;
          const prolist = this.provinceList;
          this.noProvince = (prolist.length === 0);
          console.log('changeCountry: 1 ', prolist);
          console.log('changeCountry: len ', prolist.length, 'noProvince ', this.noProvince);
          this.$emit('addressSelect', val);
        }
      );
      console.log(3);
      
    }
    
    fetchData(array, url, done) {
      console.log(2);
      this.axios
        .get(url)
        .then((resp) => {
          console.log(4);
          if (resp.status === 200) {
            const items = JSON.parse(JSON.stringify(resp.data.data));
            array.splice(0, array.length, ...items);
          } else {
            console.log(resp.status);
          }
          // 获取完数据以后,再继续执行
          done();
        })
        .catch((err) => {
          console.log(err);
        });
    }

如果不太明白的话,可以打开控制台 - 网络:
image.png

然后选择offline或low3g,或是自定义一个比较低的带宽。就知道为什么了。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...