[关闭]
@15013890200 2018-09-25T10:41:06.000000Z 字数 1419 阅读 528

Promise 用法

javascript promise setTimeout

  • 由于javascript的语言特性,即所用代码的执行都是单线程的,所有涉及到的网络操作、浏览器事件都必须是异步的。
  • 利用Promise,可以将和某一请求事件相关的操作定义到一个执行链上,这样做的优点:先统一执行ajax请求,不必关心如何处理结果。然后根据请求的结果,在将来的某个时间调用resolve或者reject函数
  • 同时,也学到了如何向setTimeout的回调函数传参数。即 setTimeout(回调函数,毫秒数,参数1,参数2,...)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>promise</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. 'use strict';
  10. var num = 10086;
  11. function ajaxFunc(resolve,reject){
  12. let timeOut = Math.random()*2;
  13. console.log('开始执行ajaxFunc啦');
  14. setTimeout(function(){
  15. if(timeOut > 1){
  16. console.log('函数执行成功');
  17. let ret = {
  18. code: 0,
  19. msg: 'timeOut: ' + timeOut
  20. }
  21. num = 10000;
  22. resolve(ret);
  23. }
  24. else{
  25. console.log('函数执行失败');
  26. reject('timeOut: ' + timeOut);
  27. }
  28. },timeOut*1000);
  29. }
  30. // var pro = new Promise(ajaxFunc).then(function(res){
  31. // console.log(res);
  32. // success();
  33. // }).catch(function(res){
  34. // console.log(res);
  35. // });
  36. // function success(){
  37. // console.log('num = ' + num);
  38. // }
  39. function multiple(num){
  40. return new Promise(function(resolve,reject){
  41. console.log('this function is '+ num + ' * ' + num);
  42. if(num > 10000){
  43. reject('num is too large');
  44. }
  45. setTimeout(resolve,1000,num*num);
  46. });
  47. }
  48. function add(num){
  49. return new Promise(function(resolve,reject){
  50. console.log('this function is ' + num + ' + ' + num);
  51. setTimeout(resolve,1000,num+num)
  52. })
  53. }
  54. var p1 = new Promise(function(resolve,reject){
  55. console.log('start calculate ');
  56. resolve(345);
  57. });
  58. p1.then(multiple)
  59. .then(multiple)
  60. .then(add)
  61. .then(function(result){
  62. console.log('value is ' + result);
  63. })
  64. .catch(function(res){
  65. console.log(res);
  66. })
  67. </script>
  68. </body>
  69. </html>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注