js 开篇
来源:互联网 发布:淘宝ulzzang短发女模特 编辑:程序博客网 时间:2024/06/05 08:40
5月中旬开始学习接触RN,并要求自己在半年之内能独立开发RN
后面发现RN需要React基础,所以开始学习一下React,后又发现React只是JS众多框架中的一种,所以先打算学习一下JS基础,所以就这么一层嵌套这一层的,到这里来了。
上面是题外话,今天要记录的是JS概念Promise,直接上例子如下:
var getJSON = function(url) { var promise = new Promise(function(resolve, reject){ var client = new XMLHttpRequest(); client.open("GET", url); client.onreadystatechange = handler; client.responseType = "json"; client.setRequestHeader("Accept", "application/json"); client.send(); function handler() { if (this.readyState !== 4) { return; } if (this.status === 200) { resolve(this.response); } else { reject(new Error(this.statusText)); } }; }); return promise;};getJSON("/posts.json").then(function(json) { console.log('Contents: ' + json);}, function(error) { console.error('出错了', error);});
上面代码中,getJSON
是对 XMLHttpRequest 对象的封装,用于发出一个针对 JSON 数据的 HTTP 请求,并且返回一个Promise
对象。需要注意的是,在getJSON
内部,resolve
函数和reject
函数调用时,都带有参数。
如果调用resolve
函数和reject
函数时带有参数,那么它们的参数会被传递给回调函数。代码中25行的json对象就是从15行中传递过来的,27行中的error对象就是从17行传递过来的。
采用链式的then
then
方法返回的是一个新的Promise
实例(注意,不是原来那个Promise
实例)。因此可以采用链式写法,即then
方法后面再调用另一个then
方法。
getJSON("/post/1.json").then(function(post) { return getJSON(post.commentURL);}).then(function funcA(comments) { console.log("Resolved: ", comments);}, function funcB(err){ console.log("Rejected: ", err);});
上面代码中,第一个
then
方法指定的回调函数,返回的是另一个Promise
对象。这时,第二个then
方法指定的回调函数,就会等待这个新的Promise
对象状态发生变化。如果变为Resolved
,就调用funcA
,如果状态变为Rejected
,就调用funcB
。如果采用箭头函数,上面的代码可以写得更简洁。
getJSON("/post/1.json").then( post => getJSON(post.commentURL)).then( comments => console.log("Resolved: ", comments), err => console.log("Rejected: ", err));
更多详细请见:http://es6.ruanyifeng.com/#docs/promise
阅读全文
0 0
- js 开篇
- JS基础之开篇
- node.JS开篇
- JS设计模式开篇
- cocos2d-js开篇 - JSB环境打造
- JS学习十五天----设计模式开篇
- JS数据结构开篇:线性表和栈
- 开篇
- 开篇
- 开篇
- 开篇
- 开篇
- 开篇
- 开篇
- 开篇!
- 开篇
- 开篇!
- 开篇
- Jboss Seam 注解总结
- [Leetcode] 300. Longest Increasing Subsequence 解题报告
- 定时器Timer
- ORALCE 导入导出
- struts框架解决多文件的上传问题(首次更博……)
- js 开篇
- java数字验证码功能实现
- JMeter测试工具使用笔记
- 批处理作业调度问题
- ECharts 点击事件的 param参数
- "_OBJC_CLASS_$_CMMotionManager" referenced from:
- Ubuntu下在环境中配置opencv
- Selenium 的具体操作(浏览器,鼠标,键盘等)
- Oracle12cRAC搭建手册