es6的异步:简化异步语法

    1. //Generator Promise async 1.解决回调地域 2.使得异步操作显得更加方便
    2. // 作用:使得异步操作更加方便
    3. // 基本操作 async它会返回一个Promise对象 then catch
    4. // async是Generator的一个语法糖
    5. async function f() {
    6. // return await 'hello async';
    7. let s = await 'hello world';
    8. let data = await s.split('');
    9. return data;
    10. }
    11. // 如果async函数中有多个await 那么then函数会等待所有的await指令 运行完的结果 才去执行
    12. f().then(v => {
    13. console.log(v)
    14. }).catch(e => console.log(e));
    15. async function f2() {
    16. // throw new Error('出错了');
    17. try {
    18. await Promise.reject('出错了');
    19. } catch (error) {
    20. }
    21. return await Promise.resolve('hello');
    22. }
    23. f2().then(v => console.log(v)).catch(e => console.log(e));
    24. // 需求: 想获取和风天气 现在now的数据
    25. const getJSON = function (url) {
    26. return new Promise((resolve, reject) => {
    27. const xhr = new XMLHttpRequest();
    28. xhr.open('GET', url);
    29. xhr.onreadystatechange = handler;
    30. xhr.responseType = 'json';
    31. xhr.setRequestHeader('Accept', 'application/json');
    32. // 发送
    33. xhr.send();
    34. function handler() {
    35. if (this.readyState === 4) {
    36. if (this.status === 200) {
    37. resolve(this.response);
    38. } else {
    39. reject(new Error(this.statusText));
    40. }
    41. }
    42. }
    43. })
    44. }
    45. async function getNowWeather(url) {
    46. // 发送ajax 获取实况天气
    47. let res = await getJSON(url);
    48. console.log(res);
    49. // 获取HeWeather6的数据 获取未来3~7天的天气状况
    50. let arr = await res.HeWeather6;
    51. return arr[0].now;
    52. }
    53. getNowWeather(
    54. 'https://free-api.heweather.net/s6/weather/now?location=beijing&key=4693ff5ea653469f8bb0c29638035976')
    55. .then(now => {
    56. console.log(now);
    57. })