创建Promise对象

function getHtml(url) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = () => {
resolve(xhr.responseText);
};
xhr.onerror = () => {
reject(xhr.statusText)
};
xhr.send();
}
);
}
function getTitle(html){
return html.substring(html.indexOf('<title>')+7,html.indexOf('</title>'));
}

执行单个Promise

getHtml('http://www.baidu.com')
.then(
data => {
console.log('[请求成功]' , getTitle(data));
},
status => {
console.log('[请求失败]', status);
}
).catch(e => {
console.log('[异常]', e);
});

Safari运行效果 ( 停用跨域限制 )

执行多个Promise

Promise.all([
getHtml('http://www.baidu.com'),
getHtml('http://www.sogou.com'),
Promise.resolve('Yahoo')
])
.then(
datas => {
console.log('[请求成功]', getTitle(datas[0]));
console.log('[请求成功]', getTitle(datas[1]));
console.log('[请求成功]', datas[2]);
},
status => {
console.log('[请求失败]', status);
}
).catch(e => {
console.log('[异常]', e);
});

Safari运行效果 ( 停用跨域限制 )

链式调用

在then方法的resolve/reject参数中返回Promise对象,实现Promise的链式调用。

getHtml('https://www.baidu.com')
.then(
val=>{
console.log(getTitle(val));
return getHtml('https://www.sogou.com'); // 返回Promise对象
}
).then(
val=>{
console.log(getTitle(val));
return getHtml('https://www.sina.com'); // 返回Promise对象
}
).then(
val=>{
console.log(getTitle(val));
}
).catch(
err=>{
console.log(err);
}
);

Safari运行效果 ( 停用跨域限制 )

最新文章

  1. JSP+JavaBean+Servlet实现各类列表分页功能
  2. oracle触发器设置uuid变量
  3. [zt] Android中使用List列表
  4. 爬虫6:多页面增量Java爬虫-sina主页
  5. 分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
  6. Data Base sqlServer DataReader与DataSet的区别
  7. udp之nat穿透的困惑
  8. 添加nginx为系统服务(service nginx start/stop/restart)
  9. Flask web开发 处理POST请求(登录案例)
  10. 高质量PHP代码的50个实用技巧必备(上)
  11. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
  12. hdu 4283 区间dp
  13. bootstrap学习一
  14. Navicat For MySQL--外键建立与cannot add foreign key constraint分析
  15. Log4j maven依赖配置
  16. jQuery版本的jsonp
  17. python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)
  18. (转)Linux top命令的用法详细详解
  19. CentOS 7 Flannel的安装与配置
  20. ZOJ2760_How Many Shortest Path

热门文章

  1. HashMap.put()和get()原理
  2. WPF 自定义鼠标光标
  3. cp命令 复制目录
  4. Java ssl认证记录
  5. vue:监听数据
  6. 剑指offer例题——跳台阶、变态跳台阶
  7. LeetCode OJ 94. Binary Tree Inorder Traversal
  8. mac下node安装提示command not found
  9. VMware安装RHEL5.5后修改分辨率设置
  10. Excel导入