Promise和箭头函数的奇怪组合

  • 箭头函数
    • 语法格式
    • 箭头函数的this
      • 调用this的场景
      • 箭头函数的this
  • Promise的用法
    • 基本格式
    • then
    • 基本用法举栗

箭头函数

参考链接

语法格式

  1. 一般情况
(x, y) => {return x + y;}var f = function(x, y){return x + y;
};
  1. 如果函数只有一行return语句时,"return"关键字和大括号都可以省略
(x, y) => x + y;var f = function(x, y){return x + y;
};
  1. 如果只有一个参数时,可以省略圆括号:
x => 2*x;var f = function(x){return 2*x;
};
  1. 如果一个入参都没有,圆括号不能省略:
() => 1;var f = function(){return 1;
};
  1. 当如入参是对象时同理:
var obj = {var1 : 1,var2 : 'var2',var3 : 3
};obj => obj.var1 + obj.var3;var f = function(param){return param.var1 + param.var3;
};

箭头函数的this

箭头函数的设计目的就是改变“this”的行为特征。this的绑定是动态的,在调用this的时候才能确定其指向。也就是说调用this的场景不同,this的指向也不同(可参考这里)。

调用this的场景

大概可以分为以下几种:

// 普通方法
function fn() {...
}// 对象的方法
var obj = {func:function(){...}
}
obj.func();// 构造函数
function Init(){...
};
new Init();// 绑定事件
btn.onClick = func(){...
};// 定时器中的函数
setInterval(function() {...
}, 1000);// 自调用函数
function(){...
}();

相应地,在这些函数内部的this的指向如下:

调用this的场景 this指向
普通方法 window
对象的方法 该对象
构造函数 构造函数所属对象
绑定事件 绑定事件所属对象(eg.按钮所属的对象)
定时器中的函数 window
自调用函数 window

举个栗子:

var obj = {birth: 1990,getAge: function () {var b = this.birth; // 1990var fn = function () {return new Date().getFullYear() - this.birth; // 普通函数调用,this指向window,所以这里不是1990};return fn();}
};
箭头函数的this

箭头函数并不绑定this,换句话说箭头函数的this会从作用域链的上一层继承this(或者说箭头函数的this总是指向外层调用者,再或者说箭头函数的this就是外层代码块的this):

var obj = {birth: 1990,getAge: function () {var b = this.birth; // 1990var fn = () => Date().getFullYear() - this.birth; // 1990return fn();}
};

Promise的用法

参考链接
  Promise对象用于表示一个异步操作的最终完成 (或失败), 及其结果值。Promise 是一种异步编程的解决方案。Pormise对象有3种对象:

  • Pending状态(进行中)
  • Fulfilled状态(已成功)
  • Rejected状态(已失败)

基本格式

基本格式如下:

var promise = new Promise(function(resolve, reject){// ... some codeif (// 异步调用结果返回成功) {resolve(value);} else { // 异步调用结果返回失败reject(error); }
})

解释

  • executor是带有 resolve 和 reject 两个参数的函数 。Promise构造函数执行时立即调用executor 函数, resolve 和 reject 两个函数作为参数传递给executor(executor 函数在Promise构造函数返回所建promise实例对象前被调用)。
  • resolve 和 reject 函数被调用时,分别将promise的状态改为fulfilled(完成)或rejected(失败)。
  • executor 内部通常会执行一些异步操作,一旦异步操作执行完毕(可能成功/失败),要么调用resolve函数来将promise状态改成fulfilled,要么调用reject 函数将promise的状态改为rejected。如果在executor函数中抛出一个错误,那么该promise 状态为rejected。executor函数的返回值被忽略。
  • 关键点。理解resolve或者reject函数究竟是谁调用的,什么时候调用的,在什么地方调用的:程序不可能知道什么时候算是异步返回成功,因此必定是在异步方法有了返回结果之后,由我们验证后来决定是调用resolve还是reject方法。
  • 如果调用了resolve方法,那么可以将异步返回的结果传给后面的.then()方法(具体用法见下面栗子),与此同时promise对象的状态将由Pending置为Fulfilled。

then

Promise实例生成后,可用then方法分别指定两种状态的回调参数。then 方法可以接受两个回调函数作为参数:
4. Promise对象状态改为Fulfilled时调用 (必选)
5. Promise对象状态改为Rejected时调用 (可选)

基本用法举栗

参考链接

let myFirstPromise = new Promise(function(resolve, reject){//当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时我们可以调用reject(...)//在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.setTimeout(function(){resolve("成功!"); //代码正常执行!}, 250);
});myFirstPromise.then(function(successMessage){//successMessage的值是上面调用resolve(...)方法传入的值.//successMessage参数不一定非要是字符串类型,这里只是举个例子console.log("Yay! " + successMessage);
});
// 最终输出:Yay! 成功!

当然,Promise还有很多其它用法,可自行百度谷歌。

箭头函数和Promise用法相关推荐

  1. ES6箭头函数以及promise/async/await测试案例

    ES6箭头函数的运用 下面以一段代码解释 function one(){return 1 以上函数用箭头函数写步骤,参考下面代码 {}和里面的东西先删去 one = (里面写参数/无参数的里面为空)= ...

  2. 箭头函数的使用用法(一)

    1 //箭头函数的一个好处是简化回调函数 2 //箭头函数没有参数,就使用圆刮号代表参数部分: 3 var f = () =>5; 4 console.log(f()); 5 //两个参数的情况 ...

  3. ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map

    根据视频进行整理 [https://www.bilibili.com/video/BV1uK411H7on?p=1] 视频资源(百度网盘): 链接:[https://pan.baidu.com/s/1 ...

  4. javascript函数进阶详细内容 函数闭包 箭头函数 call bind apply用法 偏函数 回调函数

    JS函数进阶 这次的内容我会给大家详细介绍函数方面的内容 1.箭头函数:ES6新增的定义函数的方式,箭头函数是用来简化函数定义语法的. - 箭头函数的语法: ()=>{} ()里面写形式参数,{ ...

  5. 高级JavaScript #ES6(模板字符串,let,箭头函数,forof,参数增强,解构,class,promise)

    模板字符串 1.模板字符串: 只要拼接字符串 都用模板字符串代替+a.整个字符串包裹在一对儿反引号 ` ` 中b.反引号``中支持换行 c.反引号中需要动态生成的内容必须放在${}里d. ${}里: ...

  6. Es6箭头函数详细用法

    箭头函数的声名方式: const ccc = (参数列表)=>{} 箭头函数的书写格式: 箭头函数的参数数量: 1.传入一个参数时,参数括号可以省略 举个例子: //放入一个参数(一个参数的时候 ...

  7. JavaScript箭头函数用法

    原始方式声明函数 function say(name){console.log("hello" + name); } 箭头函数 var say = name => conso ...

  8. promise用法_图解 Promise 实现原理(四):Promise 静态方法实现

    作者:Morrain 转发链接:https://mp.weixin.qq.com/s/Lp_5BXdpm7G29Z7zT_S-bQ 前言 Promise 是异步编程的一种解决方案,它由社区最早提出和实 ...

  9. es6 async函数的基本用法

    async函数的基本用法 async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句 ...

最新文章

  1. nginx下的session一致性
  2. 20180827-Java网络编程
  3. java最简单的并查集(不想交集合)以及杭电1272
  4. 几行代码,网盘链接提头来见!
  5. 如何用python做数据分析统计服_使用python实现数据分析
  6. Mac OS 查看系统版本信息/硬件信息的命令
  7. python开发面试笔试题_python集合面试笔试题
  8. 慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类
  9. C#使用并行任务库(TPL)
  10. docker安装,下载docker镜像
  11. CISP 考试教材《第 8 章 知识域:物理与网络通信安全》知识整理
  12. linux 配置软件安装源
  13. js实现360度图片旋转
  14. 苹果高管参与直播,或将发布新品
  15. python非技术面试题宝典
  16. android打地鼠案例
  17. 天线工程手册_“大神”给工控工程师快速成长的6点建议,看完你会少走弯路...
  18. 2022安全员-C证考试模拟100题及在线模拟考试
  19. ADODB , ADODB_lite
  20. 在Linux下运行你的第一个汇编程序

热门文章

  1. 用python实现给人脸带圣诞帽子
  2. Python:日期和时间包datetime的用法
  3. hp计算机硬盘如何拆下来,大容量时代的前拆----HP S700 Pro 512G SSD开箱拆解应用分享...
  4. rog枪神7超竞版评测 rog枪神7超竞版 参数配置
  5. 2013.6.3 正能量
  6. java 转为负数,java怎么转换一个负数的16进制
  7. SpringBoot + Vue + ElementUI 开发的后台管理系统
  8. 微型计算机内存条怎么拆,笔记本内存如何拆卸安装及增加内存条?
  9. java jxl_java 中JXL操作Excel实例详解
  10. IMB X3650配置RAID