使用promise构建一个向服务器异步数据请求
function getJSON(Url){
return new Promise((resolve,reject)=>{
request= new XMLHttpRequest();
request.open('Get',Url);
request.onload=function(){
try{
if(this.status===200){
resolve(JSON.parse(this.response));
}else{
reject(this.status+"" +this.statusText);
}
}catch(e){
reject(e.message);
}
}
request.onerror=function(){
reject(this.status+""+this.statusText);
}
request.send();
})
}
getJSON("data/ninjas.Json").then(ninjas=>{ninjas !== null,'ninjas obtained!'}).catch(e=>console.log('there must smth make an reject'));
//希望每天进步一点点
promise 与生成器函数的结合
function async(generator){
var iterator =generator();
function handle(iteratorResult){
if(iteratorResult.done){return;}
const iteratorValue=iteratorResult.value;
if(iteratorValue instanceof Promise){
iteratorValue.then(res=>handle(iterator.next(res))
.catch(err=>iterator.throw(err));
}
}
try{
handle(iterator.next());
}catch(e){
iterator.throw(e);
}
}
//定义好异步函数之后 我们就可以调用了
async(function*(){
try{
const ninjas= yield getJSON('data/ninjas.json');
const missions= yield getJSON(ninjas[0].missionUrl);
const missionDescription = yield getJSON(missions[0].detailsUrl);
//study the missionDetails
}catch(e){
//we weren't able to get the mission details
}
});
//BTW 自我尝试,编写回调形式的getJSON,把控制流与函数处理结合在一起显得比较丑陋
function getJSON(url,callback,err){
request=new XMLHttpRequest();
request.open('GET',url);
request.onload=function(){
try{
if(this.status===200){
callback(this.reponse);
}else{
err(this.status,this.statusText);
}
}
request.onerror=function(){
err(this.status,this.statusText);
}
request.send();
}
}
使用promise构建一个向服务器异步数据请求的更多相关文章
- 使用.net core在Ubuntu构建一个TCP服务器
介绍和背景 TCP编程是网络编程领域最有趣的部分之一.在Ubuntu环境中,我喜欢使用.NET Core进行TCP编程,并使用本机Ubuntu脚本与TCP服务器进行通信.以前,我在.NET框架本身写了 ...
- Linux上构建一个RADIUS服务器详解
作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个 ...
- 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰
服务器: 1.与客户端的交流手段多是I/O流的方式 2.对接的方式是Socket套接字,套接字通过IP地址和端口号来建立连接 3.(曾经十分影响理解的点)服务器发出的输出流的所有信息都会成为客户端的输 ...
- 探索使用 Golang 和 Webassembly 构建一个多人游戏服务器
什么是 WebAssembly?由 Google.Microsoft.Mozilla.Apple 等发起的 WebAssembly 是一种新的字节码格式,主流浏览器都已经支持 WebAssembly. ...
- 第一个androidAPP项目总结—数据请求
1.使用 ShenBuLuoHttpImpl.getMHttpImpl(context).getAddressList(mod.getCouponCode(), new HttpAfter() { @ ...
- [译]Spring Boot 构建一个RESTful Web服务
翻译地址:https://spring.io/guides/gs/rest-service/ 构建一个RESTful Web服务 本指南将指导您完成使用spring创建一个“hello world”R ...
- Ajax在jQuery中的应用---加载异步数据
Ajax是Asynchronous JavaScript and XML的缩写,其核心是通过XMLHttpRequest对象,以一种异步的方式,向服务器发送数据请求,并通过该对象接收请求返回的数据,从 ...
- iOS中GET 和 POST 数据请求
iOS中GET 和 POST 网络数据请求 同步请求和异步请求的差别: 1.同步请求,有主线程完成网路请求任务,在数据没有请求之前,用户的所有的交互事件应用都无法处理,会造成一种卡顿现象,影响用户体验 ...
- 通过python 构建一个简单的聊天服务器
构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...
随机推荐
- jmeter 5 参数化
文件: 文件编码 注意: 如果文件另存为utf-8,文件第一行头会带bom头(不可见字符),jmeter读取参数后,会把头读取到请求报文中,提示不存在该用户 什么是bom头? 在utf-8编码文件中B ...
- jquery hover中嵌套mouseenter,mouseenter函数执行多次的问题解决方案
已知晓在jq中hover的API就是把mouseenter和mouseleave组合在一起来用的,在jq中实现`hover:function(fnOver,fnOut){return this.mou ...
- ELK日志分析平台.1-搭建
ELK日志分析平台.1-搭建 2017-12-28 | admin 一.简介1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elastic ...
- 【足迹C++primer】47、Moving Objects(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/37954805 Moving Object ...
- 用IDEA打可运行的jar包
今天,需要将一个定时项目打成jar包,直接放在服务器上运行,看了一下要求是将依赖包几种放到lib文件夹下,以前都是用maven来打包的.这一次想利用idea直接打包. 但是打完包后运行发现一直缺失ma ...
- 使用postman请求响应Invalid CORS request
响应结果 解决方法: 下载之后解压,在Chrome浏览器,打开扩展 chrome://extensions/ 点击“加载已解压的扩展程序”添加我们解压的包,或者直接拖拽.之后我们就可以看到Postma ...
- 笔记68 Redis数据库
一.Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI ...
- DBCP重连的问题及解决办法(转)
本文转载:http://lc87624.iteye.com/blog/1734089,欢迎大家阅读原文. 使用数据库连接池时,免不了会遇到断网.数据库挂掉等异常状况,当网络或数据库恢复时,若无法恢复连 ...
- 理解 Java 序列化
一.什么是序列化 序列化是一种对象持久化的手段.类通过实现 java.io.Serializable 接口以启用其序列化功能. 序列化:把对象转换为字节序列的过程. 反序列化:把字节序列恢复为对象的过 ...
- 贪婪算法--Python
贪婪算法:每步都采取最优的做法,即每步都选择局部最优解,最终得到的就是全局最优解. 假设你办了个广播节目,要让全美50个州的听众都收听得到.为此你需要决定在哪些广播台播出.在每个广播台播出都需要支付费 ...