广告屏react-native项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

65 line
1.4 KiB

  1. export default class HttpUtil {
  2. /**
  3. * 利用 Promise 的 get 方式请求
  4. * @param url
  5. * @returns {Promise}
  6. */
  7. static get(url) {
  8. request = new Promise((resolve, reject) => {
  9. fetch(url)
  10. .then(response => response.json())
  11. .then(result => resolve(result))
  12. }).catch(e => reject(e.message));
  13. const timeoutRequest = new Promise((resolve, reject) => {
  14. setTimeout(reject, 30000, 'Request timeout');
  15. });
  16. return Promise
  17. .race([request, timeoutRequest])
  18. .then(res => {
  19. return res
  20. }, m => {
  21. throw new Error(m);
  22. });
  23. }
  24. /**
  25. * 利用 Promise 的 post 方式请求
  26. * @param url
  27. * @param params
  28. * @returns {Promise}
  29. */
  30. static post(url, params) {
  31. request = new Promise((resolve, reject) => {
  32. fetch(url, {
  33. method: 'POST',
  34. headers: {
  35. 'Accept': 'application/json',
  36. 'Content-Type': 'application/json'
  37. },
  38. body: JSON.stringify(params)
  39. }).then(response => response.json())
  40. .then(result => resolve(result))
  41. }).catch(e => reject(e.message));
  42. const timeoutRequest = new Promise((resolve, reject) => {
  43. setTimeout(reject, 30000, 'Request timeout');
  44. });
  45. return Promise
  46. .race([request, timeoutRequest])
  47. .then(res => {
  48. return res
  49. }, m => {
  50. throw new Error(m);
  51. });
  52. }
  53. }