1. //////////////////////////////////////////////
  2. var data = [1,2,3,4];
  3. var promise = new Promise((resolve, reject) => {
  4. console.log('init');
  5. resolve(data); //成功的时候传入的参数data
  6. reject(error); //失败的时候传入的参数error
  7. });
  8. promise
  9. .then((data) => {
  10. console.log(data); //成功
  11. return data; //返回data给下一个then()
  12. })
  13. .then((val) => { //val指上面返回的data,所以数据与命名无关
  14. val.map((item) => {
  15. console.log(item); //成功
  16. });
  17. })
  18. .then(() => {
  19. throw new Error('error!!!'); //抛出错误
  20. })
  21. .catch((error) => {
  22. console.log('error '+ error); //捕获错误,让程序继续运行
  23. })
  24. .then((data) => {
  25. console.log(typeof data); //undefined,因为data没有传过来
  26. })
  27. ///////////////////////////////////////////工作流
  28. let data = 'this is data'
  29. function asyncFunc(data) {
  30. return new Promise((resolve, reject) => {
  31. resolve(data);
  32. reject(error);
  33. });
  34. }
  35. asyncFunc(data)
  36. .then((data) => {
  37. console.log(data);
  38. })
  39. .catch((error) => {
  40. console.log(error);
  41. })
  42. ////////////////////////////ajax与异步操作
  43. function getUrl(url) {
  44. return new Promise((resolve, reject) => {
  45. let req = new XMLHttpRequest();
  46. req.open('GET', url, true);
  47. req.onload = () => {
  48. req.status === 200
  49. ? resolve(req.responseText)
  50. : reject(new Error(req.statusText))
  51. }
  52. req.send();
  53. });
  54. }
  55. let url = 'http://httpbin.org/get';
  56. // 异步操作,resolve状态后不会立即执行then()
  57. getUrl(url) // 1
  58. .then((data) => { // 7/8
  59. console.log(data);
  60. })
  61. .catch((error) => {
  62. console.error(error);
  63. })
  64. console.log('1'); // 2
  65. setTimeout(() => { // 5
  66. console.log('2');
  67. }, 0);
  68. setTimeout(() => { // 6
  69. console.log('3');
  70. }, 0);
  71. setTimeout(() => { // 7/8 根据时间而定,等待时间长会先执行then()
  72. console.log('4');
  73. }, 1000);
  74. console.log('5'); // 3
  75. console.log('6'); // 4
  76. //////////////////////////////////////

笔记:promise实例+注释的更多相关文章

  1. es6学习笔记--promise对象

    Promise对象是为了简化异步编程.解决回调地狱情况 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可 ...

  2. js-ES6学习笔记-Promise对象(2)

    1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...

  3. js-ES6学习笔记-Promise对象

    1.Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 2.所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作) ...

  4. expect学习笔记及实例详解【转】

    1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:1.1 首行加上/usr/bin/expect1.2 spawn: 后面加上需要执行的shell命令,比如说sp ...

  5. 《深入理解ES6》笔记—— Promise与异步编程(11)

    为什么要异步编程 我们在写前端代码时,经常会对dom做事件处理操作,比如点击.激活焦点.失去焦点等:再比如我们用ajax请求数据,使用回调函数获取返回值.这些都属于异步编程. 也许你已经大概知道Jav ...

  6. springJDBC学习笔记和实例

    前言:相对于Mybatis(ibatis),个人感觉springJDBC更灵活,主要实现类JdbcTemplate:它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用.它还可以帮助我 ...

  7. PHP正则表达式笔记和实例

    转自:  https://www.cnblogs.com/yafei236/p/4168290.html 本文主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己 ...

  8. python笔记3:注释命名风格

    6.注释: 行注释采用  # 开头,多行注释使用三个单引号 (''') 或三个双引号 ("' '"),注释不需要对齐 三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保 ...

  9. promise实例小球运动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. bzoj 4836: 二元运算

    死活TLE....求助 update 4.3 23:08 求助了tls之后终于过了...分治里次数界写崩了...r-l+1就行... 分治的做法很神奇!本题的限制在于操作类型与权值相对大小有关,而用[ ...

  2. JAVAEE——BOS物流项目04:学习计划、datagrid、分页查询、批量删除、修改功能

    1 学习计划 1.datagrid使用方法(重要) n 将静态HTML渲染为datagrid样式 n 发送ajax请求获取json数据创建datagrid n 使用easyUI提供的API创建data ...

  3. 关于@Override

    首先,来了解一下“重载”和“覆写”的区别: 重载: (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态 ...

  4. 基于Mysql数据库的SSM分页查询

    前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给 ...

  5. git使用步骤_2017

    (部署项目) zbot deploy developer   git对文件chmod 777后导致status发生变化,使用: git config core.fileMode false    [当 ...

  6. PHP读取大文本文件并处理数据的思路

    //处理文件 $file = fopen($filename, "r") or exit("Unable to open file!"); $total_lin ...

  7. Java经典编程题50道之六

    输入两个正整数m和n,求其最大公约数和最小公倍数. public class Example06 {    public static void main(String[] args) {       ...

  8. 微信小程序(一)

    开发流程 注册微信小程序并申请微信支付-->制作小程序-->上传并提交审核-->审核通过,小程序上线   开发微信小程序需要准备 企业公众号(被认证)以及申请小程序.微信开发技术.S ...

  9. Codeforces475D - CGCDSSQ

    Portal Description 给出长度为\(n(n\leq10^5)\)的序列\(\{a_n\}\),给出\(q(q\leq3\times10^5)\)个\(x\),对于每个\(x\),求满足 ...

  10. KV型内存数据库Redis

    Redis是开源的高性能内存Key-Value数据库, 可以提供事务和持久化支持, 并提供了TTL(time to life)服务. Redis采用单线程数据操作+非阻塞IO的模型,非阻塞IO提供了较 ...