JavaScript30 Day 6

作者: lijianliang | 来源:发表于2017-07-30 20:23 被阅读0次

这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解

第六天的挑战是在输入框中输入关键字,迅速匹配,展示含有关键字的城市,json数据是从网络中异步获得的。
效果图如下:

Day6效果图
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';

const cities = [];
fetch(endpoint)
  .then(blob => blob.json())
  .then(data => {console.log(data);cities.push(...data);});

涉及的新特性:

  const matchArray = findMatches(this.value, cities);
  const html = matchArray.map(place => {
    const regex = new RegExp(this.value, 'gi');
    const cityName = place.city.replace(regex, `<span class="hl">${this.value}</span>`);
    const stateName = place.state.replace(regex, `<span class="hl">${this.value}</span>`);
    return `
      <li>
        <span class="name">${cityName}, ${stateName}</span>
        <span class="population">${numberWithCommas(place.population)}</span>
      </li>
    `;
  }).join('');
  suggestions.innerHTML = html;
}

今天的重点是粗略地学习一下fetch()和promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
Promise 有三个状态

  • pending : 初始化状态,没有完成或拒绝
  • fulfilled: 操作成功完成
  • rejected: 操作失败

Promise有两种状态改变的方式,既可以从pending转变为fulfilled,也可以从pending转变为rejected。一旦状态改变,就「凝固」了,会一直保持这个状态,不会再发生变化。当状态发生变化,promise.then绑定的函数就会被调用。
then(onFulfilled, onRejected):这个方法实际上是把onFulfilled()函数和onRejected()函数添加到Promise对象的回调链中。回调链就像一个由函数组构成的队列,每一组函数都是由至少一个函数构成(onFulfilled() 或者 onRejected() 或者 onFulfilled() 和 onRejected())。当resolve()或者reject()方法执行的时候,回调链中的回调函数会根据PromiseStatus的状态情况而被依次调用。


传统 Ajax 指的是 XMLHttpRequest(XHR),将来会被 Fetch 替代。
使用XMLHttpRequest发送一个json
xhr.open('GET', url);
xhr.responseType = 'json';

xhr.onload = function() {
  console.log(xhr.response);
};

xhr.onerror = function() {
  console.log("错误");
};

xhr.send();

使用fetch()

fetch(url)
         .then(request => request.json)
         .then(data => console.log(data))
         .catch(console.log("错误"));

fetch()的代码明显简洁了很多,api的使用可以参考MDN


以上就是我在day6中学到的知识,这里我同样参考了soyaine的中文指南,感谢

相关文章

  • JavaScript30 Day 6

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第六天的挑...

  • JavaScript30 Day 2

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解第二天的挑战...

  • JavaScript30 Day 3

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第三天的挑...

  • JavaScript30 Day 7

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第七天跟第...

  • JavaScript30 Day 1

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第一天的挑...

  • JavaScript30 Day 10

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第十天实现...

  • JavaScript30 Day 11

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第十一天是...

  • JavaScript30 Day 9

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第9天主要...

  • JavaScript30 学习笔记导航

    JavaScript30 JavaScript30 是 Wes Bos 制作的一系列教程,有30个例子,都以纯Ja...

  • JavaScript30 Day 8(Canvas)

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解 第八天是实...

网友评论

    本文标题:JavaScript30 Day 6

    本文链接:https://www.haomeiwen.com/subject/duyklxtx.html