用于异步(了解)

    1. // Promise 承诺
    2. // 相当于一个容器,保存着未来才会结束的事件(异步操作)的一个结果
    3. // 各种异步操作都可以用同样的方法进行处理 axios
    4. // 特点:
    5. // 1.对象的状态不受外界影响 处理异步操作 三个状态 Pending(进行) Resolved(成功) Rejected(失败)
    6. // 2.一旦状态改变,就不会再变,任何时候都可以得到这个结果
    7. /*
    8. let pro = new Promise(function(resolved,rejected) {
    9. //执行异步操作
    10. let res = {
    11. code: 201,
    12. data:{
    13. name:'小马哥'
    14. },
    15. error:'失败了'
    16. }
    17. setTimeout(() => {
    18. if(res.code === 200){
    19. resolved(res.data);
    20. }else{
    21. rejected(res.error);
    22. }
    23. }, 1000);
    24. })
    25. console.log(pro);
    26. pro.then((val)=>{
    27. console.log(val);
    28. },(err)=>{
    29. console.log(err);
    30. });
    31. */
    32. /* function timeOut(ms) {
    33. return new Promise((resolved,rejected)=>{
    34. setTimeout(() => {
    35. resolved('hello promise success!!')
    36. }, ms);
    37. })
    38. }
    39. timeOut(2000).then((val)=>{
    40. console.log(val);
    41. }) */
    42. // // https://free-api.heweather.net/s6/weather/now?location=beijing&key=4693ff5ea653469f8bb0c29638035976
    43. // const getJSON = function (url) {
    44. // return new Promise((resolve, reject) => {
    45. // const xhr = new XMLHttpRequest();
    46. // xhr.open('GET', url);
    47. // xhr.onreadystatechange = handler;
    48. // xhr.responseType = 'json';
    49. // xhr.setRequestHeader('Accept', 'application/json');
    50. // // 发送
    51. // xhr.send();
    52. // function handler() {
    53. // if (this.readyState === 4) {
    54. // if (this.status === 200) {
    55. // resolve(this.response.HeWeather6);
    56. // } else {
    57. // reject(new Error(this.statusText));
    58. // }
    59. // }
    60. // }
    61. // })
    62. // }
    63. // let a = getJSON(
    64. // 'https://free-api.heweather.net/s6/weather/now?location=beijing&key=4693ff5ea653469f8bb0c29638035976')
    65. // .then((data) => {
    66. // // console.log(data);
    67. // return data[0]
    68. // }).then((obj)=>{
    69. // console.log(obj);
    70. // })
    71. // console.log(a);
    72. /*
    73. catch(err=>{
    74. })
    75. // then(null,err=>{
    76. // })
    77. */
    78. // getJSON('https://free-ap.heweather.net/s6/weather/now?location=beijing&key=4693ff5ea653469f8bb0c29638035976')
    79. // .then(data => {
    80. // console.log(data);
    81. // }).catch(err => {
    82. // console.log(err);
    83. // })
    84. // then()方法
    85. // then() 第一个参数是relove回调函数,第二个参数是可选的 是reject状态回调的函数
    86. // then()返回一个新的promise实例,可以采用链式编程
    87. // resolve() reject() all() race() done() finally()
    88. // resolve()能将现有的任何对象转换成promise对象
    89. // let p = Promise.resolve('foo');
    90. /* let p = new Promise(resolve=>resolve('foo'));
    91. p.then((data)=>{
    92. console.log(data);
    93. }) */
    94. // 应用:一些游戏类的素材比较多,等待图片、flash、静态资源文件 都加载完成 才进行页面的初始化
    95. /* let promise1 = new Promise((resolve, reject) => {});
    96. let promise2 = new Promise((resolve, reject) => {});
    97. let promise3 = new Promise((resolve, reject) => {});
    98. let p4 = Promise.all([promise1, promise2, promise3])
    99. p4.then(()=>{
    100. // 三个都成功 才成功
    101. }).catch(err=>{
    102. // 如果有一个失败 则失败
    103. }) */
    104. // race() 某个异步请求设置超时时间,并且在超时后执行相应的操作
    105. // 1 请求图片资源
    106. function requestImg(imgSrc) {
    107. return new Promise((resolve, reject) => {
    108. const img = new Image();
    109. img.onload = function () {
    110. resolve(img);
    111. }
    112. img.src = imgSrc;
    113. });
    114. }
    115. function timeout() {
    116. return new Promise((resolve, reject) => {
    117. setTimeout(() => {
    118. reject(new Error('图片请求超时'));
    119. }, 3000);
    120. })
    121. }
    122. Promise.race([requestImg('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1566364222518&di=b3c6d411bb23f17d1798fc6be3325ad5&imgtype=0&src=http%3A%2F%2Fpic.k73.com%2Fup%2Fsoft%2F2016%2F0102%2F092635_44907394.jpg'),timeout()]).then(data=>{
    123. console.log(data);
    124. document.body.appendChild(data);
    125. }).catch(err=>{
    126. console.log(err);
    127. });
    128. /*
    129. server.listen(3000).then(()=>{
    130. }).finally(server.stop());
    131. */