Promise

作者: 加油吧_ | 来源:发表于2018-07-31 22:44 被阅读10次

在学习ajax时老师提到了Promise
创建Promise 实例对象并返回,应传入一个函数对象作为参数
函数传入两个参数,成功调用resolve,失败调用reject

promise函数需要传入一个函数参数,返回一个带then的hash,成功则调用then后的第一个函数,失败调用第二个,然后再返回一个hash

window.jQuery.ajax = function({url, method, body, headers}){
  return new Promise(function(resolve, reject){
    let request = new XMLHttpRequest()
    request.open(method, url) // 配置request
    for(let key in headers) {
      let value = headers[key]
      request.setRequestHeader(key, value)
    }
    request.onreadystatechange = ()=>{
      if(request.readyState === 4){
        if(request.status >= 200 && request.status < 300){
          resolve.call(undefined, request.responseText)
        }else if(request.status >= 400){
          reject.call(undefined, request)
        }
      }
    }
    request.send(body)
  })
}

myButton.addEventListener('click', (e)=>{
  let promise = window.jQuery.ajax({
    url: '/xxx',
    method: 'get',
    headers: {
      'content-type':'application/x-www-form-urlencoded',
      'frank': '18'
    }
  })

  promise.then(
    (text)=>{console.log(text)},
    (request)=>{console.log(request)}
  )

})

想要某个函数拥有promise功能,只需让其返回一个promise即可。

function myFunction(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.onload = () => resolve(xhr.responseText);
    xhr.onerror = () => reject(xhr.statusText);
    xhr.send();
  });
};

相关文章

网友评论

      本文标题:Promise

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