promises的简单写法儿

1.Promises获取数据的简单语法

参考学习网址:http://www.webhek.com/post/javascript-promise-api.html

  function get(url) {
      return new Promise(function (rs,rj) {
          var req=new XMLHttpRequest();
          req.open('GET',url);
          req.onload=function () {
              if(req.status==200){
                  rs(req.response);
              }else {
                  rj(Error(req.statusText));
              }
          };
          req.onerror=function () {
              rj(Error('Network Error'));
          };
          req.send();
      });
  }
  get('http://192.168.0.222/w/0.0.1-SNAPSHOT/base/hospital/defaultHospitalList').then(function (response) {
      console.log('Success!',response);
  },function (error) {
      console.error('Failed!',error);
  });
3.then
new Promise(function (rs,rj) {
    setTimeout(function () {
        rs(10);
    },1000);
}).then(function (result) {console.log(result); return result*2})  10
.then(function (result) {console.log(result); return result*3;})   20
.then(function (result) {console.log(result);});   60
发现then调用都是上一个then调用返回来的值作为参数

then每次调用都是在Promise函数执行完成之后

4.catch

new Promise(function (rs,rj) {
    setTimeout(function () {
        rj('Done');
    },1000);
}).then(function (res) {
    console.log('done'+res);
}) .catch(function (res) {
    console.log('catch'+res);
});
//    一般我们都是在catch里面处理异常结果
//    通常我们在 reject 方法里处理执行失败的结果,而在catch 里执行异常结果

4.Promise.all的用法

//    Promise.all   多个异步操作都完成后再去执行异步操作
var req1 = new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { resolve('First!'); }, 4000);
});
var req2 = new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { reject('Second!'); }, 3000);
});
Promise.all([req1, req2]).then(function(results) {
    console.log('Then: ', one);
}).catch(function(err) {
    console.log('Catch: ', err);
});

5,Promies.race

//Promise.race   所有的promise中只有一个执行结束就会触发
var req1 = new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { resolve('First!'); }, 3000);
});
var req2 = new Promise(function(resolve, reject) {
    // A mock async action using setTimeout
    setTimeout(function() { resolve('Second!'); }, 8000);
});
Promise.race([req1, req2]).then(function(one) {
    console.log('Then: ', one);
}).catch(function(one, two) {
    console.log('Catch: ', one);
});
//一个有用的场景是,从多个镜像服务器下载资源,一旦有一个返回,其它的返回也就不用处理了。

6.fetch API地址:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

你可能感兴趣的:(promises的简单写法儿)