Fetch:http://reactnative.cn/docs/0.44/network.html#content
大概意思就是fetch就是通过网络请求数据的,然后看个简单的:
fetch('https://mywebsite.com/mydata.json')
那不多说,先来试一下。
这里参考的是同事的代码。这个res就是返回的数据,然后通过解析成json再用字符串形式返回,alert就是弹出框显示。
这两个没有服务器,暂时还没法测试。
再看下面的处理服务器的响应数据
这个方法名我们就不要啦,取中间的粘进我们的代码:
Run,发现啥效果也没。。。
我们加点console进去:
但是面板始终是白的,什么都没打印出来。后面经过google,说是要先在模拟器摇一摇,选调试js,然后才能console,那我们试试。
果然出现了
清空一下,然后再按两下R看下打出来的log。
打出来的log一片混乱,加一些标识符来区分。
打出来的Log:
看得出1跟2没区别,就是说这个.json不会改变response本身的值。而3是response.json的值,是一个Promise。官网提到了Promise是需要了解的:
赶紧百度一下,然后发现这个东西不是一下两下能说清的。
得另开篇幅来学习。暂时把他看成是一个传递信息的对象吧。
然后我们再加个
结果:
什么情况,未定义?为啥上面那个then的response又是有值的?responseJson不就是换了个名字为啥就是未定义了?果然还是应该要了解一下fetch是怎么回事,瞎分析不行。百度
下,我参考的是这篇文章:http://web.jobbole.com/84924/
这里说得比较好,顺带还解释了下promise。
就是说fetch(URL)其实是返回了一个promise,然后.then是promise里的一个方法。那么第二个.then要执行,必须要在第一个.then里面返回一个promise对象,而response.json()就是一个promise对象,然后通过return返回出来。
把代码改成:
结果:
???4跑哪里去了?
经多次测试发现,只要是:
如果response.json只要执行过了,那return response.json()的结果就不会被下一个then显示出来,所以这里必须把console.long([‘3’,response.json()])屏蔽掉。知道为啥的麻烦告诉我一下。
下面还提到了新语法:
还是先不深究了。。。感觉像是一个异步函数会一直等到结果返回再赋值给变量,然后再执行下一步。
然后记得要在catch捕捉所有可能出现的错误(嗯,闪退往往就是这样出现的)。
然后还有另外一个库:
这个听说已经比fetch要过时了,那以后应该会越用越少吧,那就暂时不理。
WebSocket
是个重要东西,如果不是用http请求而是使用socket的话,这个东西必不可少。
看一下:
至此,除了promise就全部搞定了。