完全不懂啥意思

完全不懂啥意思

}).then(data=>{


return  new Promise(resolve=>{


setTimeout( ()=>{resolve(data)},5000 )



})



})

为什么要在then里面新建一个promise对象,不懂,promise对象也不懂

完全就是不懂

正常公司项目里经常用到promise对象吗?不就是使用axios传输就完了吗?

正在回答

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

4回答

同学你好,问题解答如下:

1.没错,要写在then中。throw new Error('没有成功获取到数据!'); 这句代码是在执行代码的过程中,出现问题,用来抛出一个错误提示的。而catch是用来捕获这个错误的,把抛出错误的代码放在捕获错误的地方,语法是不对的。

2. 要考虑到接口出问题不能用的情况。例如后台的服务器故障了,接口不能用了,请求不了数据了。这个时候就会报错。

3.这里的代码确实不需要判断了,可以去掉。

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

有的时候也要考虑if判断,因为错误类型的是不一样的,例如错误信息可能是空字符串,可能是null。 如果是这些类型的错误,我们不想要它输出,或者要想要做其他的一些操作,就可以进行判断。这个需要具体情况具体分析了,同学先不用多想。这里可以不用写,因为已经写了报错要抛出的错误信息,老师可能习惯性写了一个判断。

4. 错误图片使用数组原因如下:

是因为获取的图片数据也是一个数组,数组中保存了多个对象,对象中保存着图片数据。然后在模板中绑定这些图片时,使用了循环先遍历了数组中。依次拿到每一个对象。然后获取对象中保存的图片。如果直接返回对象,数据类型不一致了,遍历就不能正常拿到数据了。

同学可以输出一下数据:

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

是一个数组,所以错误图片也必须是一个数组保存一致。这样才能遍历数组,找到数组中的对象。然后进行绑定。

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

具体循环和绑定如下:

 sliders就是拿到的数据,遍历时,item就是数组中的元素,也就是对象,然后再通过xx.xx的语法获取对象的属性。 如果把错误信息返回的数据改成一个对象,那么遍历的sliders就是一个对象,item表示的就是对象中的属性。后面给a绑定时,直接通过item绑定就行,再使用xx.xx的语法就不对了,所以需要绑定数据的类型一致,这里才能成功遍历并绑定上图片哦。

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

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 看不穿繁华 提问者 #1
    好的,老师,回答的全面,明白了,十分感谢~
    2019-12-28 20:06:40
好帮手慕星星 2019-12-25 18:15:44

同学你好,问题解答如下:

1、Promise自带两个参数函数,resolve和reject。语法:

new Promise( function(resolve, reject) {...} /* executor */  );

Promise构造函数执行时立即调用executor 函数,也就是function。 resolve 和 reject 两个函数作为参数传递给executor(executor 函数在Promise构造函数返回所建promise实例对象前被调用)。promise的状态有两种,成功时调用resolve函数,失败时调用reject 函数。

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

这是resolve的规定用法,可以参考官方文档:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

2、在js中,大部分代码都是同步执行的,也就是一步一步的按照顺序执行。但是有时候我们需要异步执行,获取数据的时间可能会很长,这个时间我们不想等待,一边获取数据一边进行其他操作。这时候就可以使用promise。再加上定时器也是异步执行的。

视频中老师是为了模拟延迟获取数据,所以使用了promise,加上定时器,1s之后调用resolve方法,决议成功,返回数据。所以开始的时候显示加载图标,1s之后显示数据。

3、throw new Error('没有成功获取到数据!')可以在拿不到数据的情况下抛出。例如:

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

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

祝学习愉快!

  • 提问者 看不穿繁华 #1
    对3有些疑问:throw new Error('没有成功获取到数据!')这句提示代码,必须写在.then中的吗,不能放在下面的.catch中吗? 还有就是这也不科学呀?后端给我的数据就是code为0,在控制台也能看到,前端怎么会出现这种错误呢?后端就更不可能的了,他给的数据呀?
    2019-12-27 09:42:22
  • 提问者 看不穿繁华 #2
    还有补充一个问题:为什么在.catch这里要进行if判断呀,就是: if(Error){ console.log(Error); } 不判断,直接写这个不行吗console.log(Error);因为只有catch捕获到才能出现错误提示呀?
    2019-12-27 09:46:58
  • 提问者 看不穿繁华 #3
    另外:return [ { linkUrl:'https://www.immoc.com', picUrl: require('assets/img/404.png') } ] return 后面为啥是要数组呢,直接使用对象的话,错误图片就出不来了
    2019-12-27 09:50:18
好帮手慕星星 2019-12-25 16:20:48

同学你好,问题解答如下:

1、promise对象在前面es6基础部分讲解过:

https://class.imooc.com/course/817

主要是用于异步操作。

2、这里老师是为了模拟延迟获取数据,开始的时候显示加载图标,1s之后再返回数据,显示出来。

3、如果同学不想要延迟效果,就可以不添加promise 。

4、当通过接口获取数据,里面没有数据的时候,就会执行抛出的错误。当前项目中因为接口可以获取到数据,所以同学不添加这句话也可以。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 看不穿繁华 #1
    1.我是说,对这段代码我不懂,为什么要这么写,死规定吗? 2.公司工作的时候,是否需要使用promise,啥情况用? 3.throw new Error('没有成功获取到数据!')没有出来?啥情况?
    2019-12-25 16:31:04
  • 提问者 看不穿繁华 #2
    promise主要解决延迟效果的?能不能好好讲讲
    2019-12-25 16:32:34
  • 提问者 看不穿繁华 #3
    return new Promise(resolve=>{ setTimeout( ()=>{resolve(data)},5000 )} 第一:为啥return,什么时候return? 第二:两个resolve都啥意思,凭啥这么写?data可以直接这么放里?完全不知道啥玩意
    2019-12-25 16:37:15
提问者 看不穿繁华 2019-12-25 16:19:22

下面这又是一个问题啊,一共两个问题,上一个问题就给我回复丢了一个

home.js

return axios.get('http://www.imooc.com/api/home/slider', {timeout: 10000}).then(res=>{


// console.log(res.data)


if(res.data.code === 0){


return res.data



}


throw new Error('没有成功获取到数据!')


}



).catch(err=>{


if(err){


console.log(err);



}


return [


{

linkUrl:'https://www.immoc.com',

picUrl: require('assets/img/404.png')



}



]

这里面压根儿也没用到throw new Error('没有成功获取到数据!')这句话啊,这句提示信息根本没有,什么情况下用到throw new Error('没有成功获取到数据!')


问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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