then在c语言中什么意思,通俗浅显的理解Promise中的then
Promise,ES6中定义的规范,不会使用Promise,都不敢说自己用过ES6,大部分介绍Promise的规范的文章对于新手小白来说看得云里雾里,且并不是通俗易懂。本文通过实例介绍讲述Promise中then的的最通俗应用理解,代码建立在不出现异常的情况的操作下,不严谨之处,请以官方规范为标准。
先看一下下面4个Promise到底有什么区别呢?
func().then(function () {
return cb();
});
func().then(function () {
cb();
});
func().then(cb());
func().then(cb);
如果你知道答案,以下内容你可以不用继续。
上面的代码过于简单,运行时话需要稍微进行一点扩展,每个方法中都打印出promise上一步的调用值,为了方便我给每个方法加了一个下标输出,分别是1、2、3、4。
let func = function() {
return new Promise((resolve, reject) => {
resolve('返回值');
});
};
let cb = function() {
return '新的值';
}
func().then(function () {
return cb();
}).then(resp => {
console.warn(resp);
console.warn('1 =========
});
func().then(function () {
cb();
}).then(resp => {
console.warn(resp);
console.warn('2 =========
});
func().then(cb()).then(resp => {
console.warn(resp);
console.warn('3 =========
});
func().then(cb).then(resp => {
console.warn(resp);
console.warn('4 =========
});
不卖关子,直接看结果
首先要明白Promise中then方法会干什么事情!
官方文档是这样定义的:
一个 promise 必须提供一个 then 方法以访问其当前值、终值和据因。
promise 的 then 方法接受两个参数:
promise.then(onFulfilled, onRejected) Todo:这里只介绍onFulfilled,所以删除了关于onRejected的规范定义
onFulfilled 和 onRejected 都是可选参数。
如果 onFulfilled 不是函数,其必须被忽略
如果 onFulfilled 是函数:
当 promise 执行结束后其必须被调用,其第一个参数为 promise 的终值
在 promise 执行结束前其不可被调用
其调用次数不可超过一次
用通(ren)俗(hua)的话来说:
then方法提供一个供自定义的回调函数,若传入非函数,则会忽略当前then方法。
回调函数中会把上一个then中返回的值当做参数值供当前then方法调用。
then方法执行完毕后需要返回一个新的值给下一个then调用(没有返回值默认使用undefined)。
每个then只可能使用前一个then的返回值。
直观的图:
有了上面的定义我们带着三个疑问来回答问题:
上一个then中传入了回调函数吗?
上一个then中提供了返回值吗?
若上一个then中若提供了返回值,返回了什么?
执行第一个方法:
func().then(function () {
return cb();
}).then(resp => {
console.warn(resp);
console.warn('1 =========
});
function () {
return cb();
}
显而易见,是传入了回调函数的
回调函数中把cb执行后的返回值当做then中的返回值,所以输出了“新的值”;
执行第二个方法:
func().then(function () {
cb();
}).then(resp => {
console.warn(resp);
console.warn('2 =========
});
function () {
cb();
}
then回调方法,只是执行了cb方法,并没有return值,定义中讲过若then没有返回值,提供给下一个then使用的参数就是undefined,所以打印出来的是undefined;
执行第三个方法:
func().then(cb()).then(resp => {
console.warn(resp);
console.warn('3 =========
});
func().then(cb())
then中cb()执行后返回的并不是一个函数,在Promise规范中会自动忽略调当前then,所以会把func中的返回值供下一个then使用,输出了“返回值”
执行第四个方法:
func().then(cb).then(resp => {
console.warn(resp);
console.warn('4 =========
});
func().then(cb)
第一个方法在回调内部返回cb执行后的值,第四个方法则直接把cb当做回调,第一个方法与第四个方法异曲同工之妙,所以也输出了“新的值”。
then在c语言中什么意思,通俗浅显的理解Promise中的then相关推荐
- 通俗浅显的理解promise中的then
通俗浅显的理解promise中的then 先看一下下面4个Promise到底有什么区别呢? 执行第一个方法: 执行第二个方法: 执行第三个方法: 执行第四个方法: 文章原文出处:博主petruslaw ...
- java中io是什么_深入理解Java中的IO
深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...
- php中的控制器是什么意思,理解PHP中的MVC编程之控制器_php
简单来讲,控制器的作用就是接受请求.它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层.控制器将使用$_GET自动全局变量来判断载入哪一个模块. 一个请求的例子,看起来像这 ...
- python中args1是什么意思_理解Python中的*,*args
1.*在函数调用中的作用 首先定义一个函数,并调用 deffun(a, b, c):printa, b, c fun(1,2,3) 则该函数的输出为 1 2 3 传递3个参数调用该函数,则该函数会打印 ...
- ios开发中计算代码运算时间_理解Unity中的优化(二):内存
内存: 内存消耗是一个关键的性能指标,尤其是在内存资源有限的平台上,比如低端移动设备. 内存消耗分析: 在Unity中诊断内存问题,Unity介绍了一款开元的可视化内存分析工具--MemoryProf ...
- python中args是什么意思_理解Python中的*,*args
1.*在函数调用中的作用 首先定义一个函数,并调用 deffun(a, b, c):printa, b, c fun(1,2,3) 则该函数的输出为 1 2 3 传递3个参数调用该函数,则该函数会打印 ...
- java中view是什么_深入理解Android中View
文章目录 [隐藏] 这回我们是深入到View内部,去研究View,去了解View的工作,抛弃其他因素,以便为以后能灵活的使用自定义空间打下一定的基础.希望有志同道合的朋友一起来探讨,深入Android ...
- mysql中having的意思_正确理解MySQL中的where和having的区别
展开全部 1.where和having都可以使用的32313133353236313431303231363533e4b893e5b19e31333363383964场景select goods_pr ...
- python中e什么意思_如何理解Python中 =是什么意思?怎么用?
这个运算符还是学习python最基础内容时候最先了解的,今天小编在运行代码时候,在这个位置踩了坑,大家一起来看看吧~ 前言: 今天在运行之前写的一个Python脚本时,发生了一个奇怪的现象(我怎么老遇 ...
- 【阅读笔记】机器阅读理解(中)——架构篇
文章目录 一.MRC模型架构 总体架构 编码层 词表向量 字符编码 上下文编码 交互层 互注意力 自注意力 上下文编码 输出层 多项式选择答案生成 区间式答案 自由式答案生成 注意力机制的应用 拷贝生 ...
最新文章
- SAE上传web应用(包括使用数据库)教程详解及问题解惑
- LeetCode Pascal's Triangle II
- 使用select和insert的小细节
- 让思考成为一种习惯:一位软件工程专业学生的大学生涯规划
- 浙江省团校计算机考试试题及答案,2001年秋浙江省高校计算机等级考试试卷(二级C)及答案..doc...
- css背景图根据屏幕大小自动缩放
- @override报错_C++ 多态性:C++11:override 与 final(学习笔记:第8章 09)
- python之美_Python之美[从菜鸟到高手]--生成器之全景分析
- jenkins学习笔记2-在centos中安装jenkins master测试环境
- vue的一点初级理解
- 程序开发基础学习五(json配置、解析文件,c++篇)
- Android开发中加载Gif动画图片方法
- 联想E430c:To interrupt normal starup,press enter问题解决方法
- java替换图片文字_Java 替换PPT文档中的文本和图片
- 这个简笔画很值得学,哄小孩必备
- 第三方登陆-------android整理知识
- 在线考试题库型App
- 【华为OD机试/笔试真题 python】出错的或电路
- 51单片机驱动ESP8266
- 【读论文-笔记】——2.沐神读Resnet
热门文章
- Ardupilot笔记:Rover auto模式下的执行流程
- iPhone显示返回的是html界面,iPhone X怎么回到主界面?苹果X返回主页的两种方法...
- 如何将电脑上的音乐导入iphone,怎样将电脑音乐导入苹果手机中
- echarts-横坐标文字竖着显示和倾斜45度显示
- 博尔顿大学介绍让学生们在9月重返校园的创新措施
- 【实习日报】2019年6月上半月 前端开发实习工作日报汇总
- 【OpenCV】-重映射
- 阴阳日历转换 公历日期转农历 八字排日柱算法
- 数据模型的作用和数据模型的三个要素:
- 永洪科技怎么样_【永洪科技工资|永洪科技待遇怎么样】-看准网