您现在的位置:首页 >> 前端 >> 内容

es6promise用法

时间:2017/8/19 10:34:00 点击:

  核心提示:直接上代码var getJSON = function(url) {var promise = new Promise(function(resolve, reject){var client = n...

直接上代码

var getJSON = function(url) {
  var promise = new Promise(function(resolve, reject){
    var client = new XMLHttpRequest();
    client.open("GET", url);
    client.onreadystatechange = handler;
    client.responseType = "json";
    client.setRequestHeader("Accept", "application/json");
    client.send();

    function handler() {
      if (this.readyState !== 4) {
        return;
      }
      if (this.status === 200) {
        resolve(this.response);
      } else {
        reject(new Error(this.statusText));
      }
    };
  });

  return promise;
};

getJSON("/posts.json").then(function(json) {
  console.log('Contents: ' + json);
}, function(error) {
  console.error('出错了', error);
});
promise还有个all方法,传入一个promise数组,直接上代码,这是一段nodejs代码,用于处理异步数据,前台也一样用,都是一个道理。
function getPageAsync(url){
  return new Promise(function(resolve,reject){
  console.log('正在爬取'+url);
   
  http.get(url,function(res){
  var html = '';
   
  res.on('data',function(data){
  html+=data;
  })
   
  res.on('end',function(){
  resolve(html);
  //var courseData = filterChapters(html);
   
  //printCourseInfo(courseData);
  })
  }).on('error',function(e){
  reject(e);
  console.log('获取数据出错!')
  })
   
  })
  }
   
  var fetchCourseArray = [];
  videoIds.forEach(function(id){
  fetchCourseArray.push(getPageAsync(baseUrl+id));
  });
   
  Promise
  .all(fetchCourseArray)
  .then(function(pages){
  var coursesData = [];
  pages.forEach(function(html){
  var courses = filterChapters(html);
  coursesData.push(courses);
  })
   
  coursesData.sort(function(a,b){
  return a.number
  })
  printCourseInfo(coursesData);
  });

 

Tags:ES S6 6P PR 
作者:网络 来源:qq_2894949