<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
const p1 = new Promise(function (resolve, reject) {
setTimeout(() => resolve("test"), 2000)
}) const p2 = new Promise(function (resolve, reject) {
//经过调试发现,resolve的内容和状态能被传入的promise实例覆盖,如果是reject则不能被覆盖。
setTimeout(() => reject(p1), 3000)
}) console.log(p1);
console.log(p2);
p2
.then(function(result) {
console.log(result);
return "chenyujie";})
.catch(function(error ) {
console.log("testsss");
console.log(error);
return p2;})
.then(function(result) {
console.log(result);
console.log(this);},
function(error){
console.log("zhongguo");
console.log(error);
})
// .catch(result => {
// console.log(result);
// })
</script>
</body>
</html>

then函数返回一个promise对象,promise对象有两个基本属性,状态和结果,其中then回调函数的返回值如果是字符串则直接为结果,状态为fulfilled,如果返回值为promise对象,则以对象状态和结果为准。(具体情况可以调试看,不一定准确,该对象有点麻烦)

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

const getJSON = function(url) {
const promise = new Promise(function(resolve, reject){
const handler = function() {
if (this.readyState !== 4) {
return;
}
// console.log(this);
if (this.status === 200) {
console.log(this.responseType)
resolve(this.responseType);
} else {
console.log(this.status)
console.log("-------------"+this.statusText+"----------------")
reject(new Error(this.statusText));
}
};
const client = new XMLHttpRequest();
//client.open("GET", url, false); //第三个参数设置为false,使得函数执行为同步操作
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "html";
client.setRequestHeader("Accept", "text/html");
console.log("test1")
client.send();
console.log("test2") }); return promise;
}; //getJSON("https://www.baidu.com/wang") getJSON("https://www.baidu.com/wang").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.log('出错了', error);
});

最新文章

  1. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
  2. LSD-SLAM深入学习(2)-算法解析
  3. redis系列-redis的连接
  4. VS2015 Xamarin for iOS
  5. guava学习--FluentIterable
  6. POJ1155 TELE(树形DP)
  7. 在DNS管理器——用局域网IP指定你所起的域名名称
  8. 移植mysql到嵌入式ARM平台
  9. linux下多线程踩过的坑(不定更新)
  10. iOS播放短的音效
  11. 关于Build Active Architecture Only属性
  12. python web开发之django
  13. (转载) Java子类与父类之间的对象转换
  14. hdu 6095 Rikka with Competition---思维题贪心
  15. duilib窗口从任务栏恢复问题
  16. day051 Django创建
  17. HUABASE :基于列存储的关系型数据库系统
  18. [转帖] Linux 创建一个简单的私有CA、发证、吊销证书
  19. JS怎么把字符串数组转换成整型数组
  20. 【北京】安全研究员/工程师-20-35K,人体工程学座椅坐等你来~

热门文章

  1. Vue+axios的四种异步请求,参数的携带以及接收
  2. 【LeetCode】203.移除链表元素
  3. ajax请求对返回数据data的处理
  4. 微信小程序云开发-云存储的应用-识别营业执照
  5. 分享一个自己画div的技巧
  6. CSP-S 2020
  7. onclick=&quot;return doAlert()&quot; onclick=&quot;return false&quot;
  8. TensorFlow模型部署到服务器---TensorFlow2.0
  9. 手脱UPX壳的方法
  10. GooseFS助力大数据业务数倍提升计算能力