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构建一个向服务器异步数据请求的更多相关文章

  1. 使用.net core在Ubuntu构建一个TCP服务器

    介绍和背景 TCP编程是网络编程领域最有趣的部分之一.在Ubuntu环境中,我喜欢使用.NET Core进行TCP编程,并使用本机Ubuntu脚本与TCP服务器进行通信.以前,我在.NET框架本身写了 ...

  2. Linux上构建一个RADIUS服务器详解

    作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个 ...

  3. 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰

    服务器: 1.与客户端的交流手段多是I/O流的方式 2.对接的方式是Socket套接字,套接字通过IP地址和端口号来建立连接 3.(曾经十分影响理解的点)服务器发出的输出流的所有信息都会成为客户端的输 ...

  4. 探索使用 Golang 和 Webassembly 构建一个多人游戏服务器

    什么是 WebAssembly?由 Google.Microsoft.Mozilla.Apple 等发起的 WebAssembly 是一种新的字节码格式,主流浏览器都已经支持 WebAssembly. ...

  5. 第一个androidAPP项目总结—数据请求

    1.使用 ShenBuLuoHttpImpl.getMHttpImpl(context).getAddressList(mod.getCouponCode(), new HttpAfter() { @ ...

  6. [译]Spring Boot 构建一个RESTful Web服务

    翻译地址:https://spring.io/guides/gs/rest-service/ 构建一个RESTful Web服务 本指南将指导您完成使用spring创建一个“hello world”R ...

  7. Ajax在jQuery中的应用---加载异步数据

    Ajax是Asynchronous JavaScript and XML的缩写,其核心是通过XMLHttpRequest对象,以一种异步的方式,向服务器发送数据请求,并通过该对象接收请求返回的数据,从 ...

  8. iOS中GET 和 POST 数据请求

    iOS中GET 和 POST 网络数据请求 同步请求和异步请求的差别: 1.同步请求,有主线程完成网路请求任务,在数据没有请求之前,用户的所有的交互事件应用都无法处理,会造成一种卡顿现象,影响用户体验 ...

  9. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

随机推荐

  1. VS2008中编译运行MFC应用程序时,出现无法启动程序,因为计算机中丢失mfc90ud.dll的解决方案

     解决方法:"工具"->"选项"->"项目和解决方案"->"VC++目录",在可执行文件栏中加上如 ...

  2. 微信小程序 使用wxParse解析html

    微信小程序 加载 HTML 标签:https://blog.csdn.net/zclengendary/article/details/54312030 微信小程序 使用wxParse解析html:h ...

  3. dubbo的一些特性理解一下

    还有 启动检查.负载均衡.多协议支持 等 待总结

  4. Python安装和使用教程(windows)

    点击进入幕布视图浏览 https://mubu.com/doc/a8VGCUfqqw 一.Python下载 1.进入Python官网:https://www.python.org/ 2.选择windo ...

  5. 欧拉函数(Euler_Function)

    一.基本概述在数论,对正整数n,欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商 ...

  6. 利用HTML和CSS实现常见的布局

    水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父容器是paren ...

  7. 提交disable的Select值到后台

    需求:界面上把select控件disable,然后将默认值传到后台 问题1:select disable: js中可以这样写: document.getElementById("provin ...

  8. 【教程】虚拟机安装CentOS 7 ping不通百度/并且使用Xshell 连接

    最近需要在电脑虚拟机上安装CentOS 7 ,之前对虚拟机并不熟悉,捅咕了两天时间,如果终于安装成功. 之前遇到的坑:安装完CentOS 7 之后一直ping 不通www.baidu.com 网上查询 ...

  9. Android编程之Listener侦听的N种写法及实现原理

    写下这个题目时突然想起鲁迅笔下的孔乙已,茴香豆的几种写法,颇有些咬文嚼字的味道.虽然从事手机编程多年,但一直使用的是C和C++编程,由于安卓早期只支持JAVA开发,所以对于时下如火如荼的安卓系统,我一 ...

  10. nodejs模块——fs模块 WriteFile写入文件

    WriteFile写入文件 使用fs.writeFile(filename,data,[options],callback)写入内容到文件. 参数说明: filename String 文件名 dat ...