前端遇到的问题及思考

我在写前端代码时遇到的一些问题

这是记录我在写代码时遇到的一些问题,这里包含了大大小小的问题及思考。每天记录,开卷有益。也欢迎各位大佬讨论指正我的理解和逻辑。

JS和Axios阶段

1 +=和map的一点思考

 //map进行渲染
    const htmlStr = result.data.data.map((item, index) => {
     //这里的map遍历映射需要获取到已有数据进行遍历,每遍历一遍就把原来的存储下来,因此可以理解成是在已有的数据下进行一种映射(有实物才会有影子)
      return `<tr>
      <td>${index + 1}</td>
      <td>${item.bookname}</td>
      <td>${item.author}</td>
      <td>${item.publisher}</td>
      <td>
        <span class="del">删除</span>
        <span class="edit">编辑</span>
      </td>
    </tr>`
    }).join('')
    console.log(htmlStr)
    document.querySelector('.list').innerHTML = htmlStr
//+=的思考在这里是把每新渲染的数据进行了保留,一直保留在页面中,在最开始没有写+导致输入框没输入一个自动覆盖了之前的。
chatUl.innerHTML += `
        <li class="left">
          <img src="./assets/you.png" alt="">
          <span>${result.data.data.info.text}</span>
        </li>
      `

2 Ajax的原理

1.创建 XMLHttpRequest 对象
2. 配置请求方法和请求 url 地址
3. 监听 loadend 事件,接收响应结果
4. 发起请求

const xhr = new XMLHttpRequest()
xhr.open('POST(orGET)','url网址')
xhr.addEventListener('loadend',()=>{
	console.log(xhr.response)
})
xhr.send()

3 Promise

<script>
    //先创建Promise对象,有两个参数resolve和reject,三种状态:pending,fulfilled,reject
    const p = new Promise((resolve, reject) => {
      //一旦创建Promise对象就会执行pending待执行状态
      //执行异步代码
      setTimeout(() => {
        //resolve执行成功就会显示fulfilled状态已兑现,执行then函数
        resolve('模拟成功的结构')
        // reject()=>'reject'状态已拒绝,执行mycatch
        // reject(new Error('shibai'))
      }, 1000)
    })
    console.log(p);
    //获取结果
    p.then(result => {
      console.log(result)
    }).catch(error => {
      console.log(error)
    })
  </script>

手写Promise

<body>
  <p class="my-p"></p>
  <script>
    /**
     *  1. 创建Promise对象
     *  2. 执行XHR异步代码,获取省份列表
     *  3. 关联成功或失败函数,做后续处理
    */
   	  const p = new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest()
      xhr.open('GET', 'url')//这里url没有写接口
      xhr.addEventListener('loadend', () => {
        //如何判断响应成功失败?
        //2xx开头都是成功的响应状态码
        //如果成功调用resolve函数
        //在这里将Pronise和XHR联系在一起
        if (xhr.status >= 200 && xhr.status < 300) {
          resolve(JSON.parse(xhr.response))
        } else {
          reject(new Error(xhr.response))
        }
        console.log(xhr.response)
      })
      xhr.send()
    })
    //接受成功或者失败
    p.then(result => {
      console.log(result)
      document.querySelector('.my-p').innerHTML = result.list.join('<br>')
    }).catch(error => {
      console.log(error)
      document.querySelector('.my-p').innerHTML = error.message
    })
  </script>
</body>
  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值