基于Promise处理Ajax请求
1、处理原生Ajax
<script> function queryData(url) { var p = new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return; } if (xhr.readyState == 4 && xhr.status == 200) { resolve(xhr.responseText); } else { reject('服务器错误'); } }; xhr.open('get', url); xhr.send(); }); return p; } queryData('http://localhost:3000/data') .then(function(data) { console.log(data); return queryData('http://localhost:3000/data1'); }) .then(function(data) { console.log(data); return queryData('http://localhost:3000/data2'); }) .then(function(data) { console.log(data); }) </script>
2、then参数中的函数返回值
(1)返回Promise实例对象:该返回实例会调用下一个then
queryData('http://localhost:3000/data') .then(function(data) { return queryData('http://localhost:3000/data1'); }) .then(function(data) { return new Promise(function(resolve, reject) { resolve('我是Promise实例'); }) }) .then(function(data) { console.log(data); // 我是Promise对象 })
(2)返回普通值:返回的普通值会传递给下一个then,通过then参数中函数的参数接受该值
queryData('http://localhost:3000/data') .then(function(data) { return queryData('http://localhost:3000/data1'); }) .then(function(data) { return '我是普通值'; // 会内部生成一个Promise对象 }) .then(function(data) { console.log(data); // 我是普通值 })