map()异步处理与for()的同步执行

        在调用一个词云图组件时,需要提供dataList数据,而数据来源于created()中从后端获取的wordList中的name参数。

        for(var i=0;i<this.wordList.length;i++){this.dataList[i] = this.wordList[i].name;}
        console.log(this.dataList);

        通过以上代码进行赋值时出现了一个问题,就是尽管dataList打印出来的结果是正常的,但词云图加载失败,没有将dataList中的各个关键词显示出来。而使用map()函数就没有问题:this.dataList = this.wordList.map(item => item.name);

        原因分析:

        大概是由于数据加载的时机不同导致的。在使用map()方法时,它是在异步地处理wordList数据,并且在数据处理完成后立即将结果赋值给dataList,这样就确保了dataList中的数据在词云图组件渲染时已经准备好了,因此词云图能够正常显示。

        而当使用for循环时,如果前面的HTTP异步请求尚未完成就立即渲染词云图组件,那么dataList中可能还没有数据,导致词云图无法正常显示。这是因为for循环是同步执行的,它会立即遍历wordList数组,而异步请求的结果可能尚未返回,dataList中可能还没有数据。

        可以通过在异步请求完成后再渲染词云图组件,或者在模板中使用条件渲染,确保只有在dataList中有数据时才渲染词云图组件。

http({
			  url: '/show_word_cloud',
			  method: 'GET',
			  data: {
				productId: this.productId,
			  }
			});
		  }).then((res) => {
			// console.log(res);
			this.wordList = res.data.list;
			//for(var i=0;i<this.wordList.length;i++){this.dataList[i] = this.wordList[i].name;}
			//console.log(this.dataList);
			this.dataList = this.wordList.map(item => item.name);//存放评价词
		  }).catch((error) => {
			console.error('Error:', error);
		  });

        上面的这个http对象(一个封装了HTTP请求功能的组件)向服务器发起的GET请求,这个请求是异步的,因为它不会阻塞 JavaScript 的执行,而是会在后台发送给服务器并等待服务器响应。在发送请求的同时,JavaScript 代码会继续执行后续的语句,不会等待服务器响应返回。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值