老师,请问下。

老师,请问下。

home.js里面可不可以这样写:

import axios from 'axios';
import {succ_code,TimeOut} from './config';
export const getHomeSlider=()=>{
	return axios.get('http://www.imooc.com/api/home/slider',{timeout:TimeOut}).then(res=>{
		if(res.data.code===succ_code){
			return res.data.slider;
		}
		throw new Error('没有成功获取到数据')
	}).catch(err=>{
		if(err){
			console.log(err);
		}
		return [{
			linkUrl:'www.hao123.com',
			picUrl:require('assets/img/404.png')
		}]
	}).then(data=>{
		setTimeout(function(){
			return data;
		},1000);
	});
}

然后在slider.vue里面这个延迟一秒出来的data,再接着then然后处理这个data,这样可以吗?


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 经过测试, 这样写是应该可以实现给sliders赋值的。

示例, 老师这边定义一个新的变量, 

http://img1.sycdn.imooc.com//climg/5ce7d9ce0001211211800322.jpg

在methods中定义的方法,

http://img1.sycdn.imooc.com//climg/5ce7da1d0001117205550279.jpg

 在控制可以看到一秒后打印了this.test的值

http://img1.sycdn.imooc.com//climg/5ce7da490001cb9906870084.jpg

同学结合示例测试一下哦, 

如果还有问题, 建议: 可以将你的slider.vue文件代码粘贴过来, 便于准确的定位和解决问题

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~


好帮手慕慕子 2019-05-24 15:17:12

同学你好, 不可以这样写哦, 首先setTimeout是一个异步操作, 另, 里面是一个匿名函数, 所以不可以直接使用return返回值, 建议: 使用视频中老师讲解的Promise方法。 

老师这边给同学举个简单的示例, 函数获取不到setTimeout中return返回的值 

http://img1.sycdn.imooc.com//climg/5ce79a35000122c904790241.jpg

打印结果:

http://img1.sycdn.imooc.com//climg/5ce79a49000139f104250165.jpg

同学可以结合示例自己测试一下

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 aleeeeex #1
    老师,那我在home.js里面不变,跟视频一样new 一个promise,但是我在slider.vue里面这样: methods:{ getSliders(){ getHomeSlider().then(data=>{ setTimeout(function(){ this.sliders=data; },1000) }); } } 设置一个延时函数,一秒后再给sliders赋值,为什么也不行呀?
    2019-05-24 15:34:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师