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);
});
//一个有用的场景是,从多个镜像服务器下载资源,一旦有一个返回,其它的返回也就不用处理了。