文档章节

大白话讲解Promise(一)一文 的学习+新领悟

noo-noo
 noo-noo
发布于 2016/04/02 23:12
字数 664
阅读 116
收藏 1

学习地址:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html

返回主页

吕大豹

 最近写了三篇Promise的文章。拿来一学,自己画了好些笔记,分享一下。

 

简述一下es6中的要点:

1、Promise是一个构造函数,自己身上有all、reject、resolve、then、catch。。。。。

Promise定义时,必须传递一个函数,否则报错; 

 该函数有两个参数,这个参数也是函数,这两个函数应该是内部生成并传递进去的。

 

var p = new Promise(function(resolve, reject){    //做一些异步操作
    setTimeout(function(){
        resolve('随便什么数据');
    }, 2000);
});

定义后,这个Promise会直接执行的。 这是我原来没有意识到的

2、p.then(resolvedFun,rejectedFun);

then方法也是返回一个新的Promise,并不再是原来的Promise自己了。  以第一个函数resolvedFun为例来说明,

resolvedFun=function(data){  
    //return "完成 "+data;                  直接返回数据,也会被封装出一个新的Promise实例来,以提供给下then调用。
    //return new Promise(function(){});    返回另一个Promise 。  我测试这个new Promise是否和then返回后的Promise不是同一个。
}

测试代码:

var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
        console.log('执行完成');
        resolve( "somedata");
    }, 2000);
})
thenP=p.then(function(data){
    window.newP= new Promise(function(){});
    return window.newP
})
thenP===newP  //显示是false,表明内部会对then的参数函数的返回值进行包装。

3、p.catch(catchFun);

文中提到,catchFun相当于代替then中的第二个参数:rejectedFun。这一点没问题

但还说如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中”

经过我在chrome,node,edge里面测试结果,这个说法是不对的。如果代码写错,比如变量未定义这种,是会报错,而不是进入到catch中,看来还是要try catch来捕获代码的异常。

----2016.12.14更正一下:catch只捕获then中的异常,且cache的参数函数被传入的reason是一个Error对象。  

不知道我原来是怎么测试的,我当时可能是在Promise的构造函数中写的异常,就以为原作者写的不对!

4、Promise.all([ 多个Promise对象 ]).then(function( resultList){}); 

这个记住结构就好了。

5、Promise.race([ 多个Promise对象 ]).then(function( firstResult){}); 

只返回第1个异步回来的结果。这个原来没注意到过

 

 

2016.12.6 补充:

一般情况下我们会使用 new Promise 来创建prmise对象,除此之外我们也可以使用 Promise.reslove 和 Promise.reject 来直接创建,例如 Promise.resolve(42) 可以认为是以下代码的语法糖

new Promise((reslove)=>{
    reslove(42);
});

© 著作权归作者所有

noo-noo
粉丝 17
博文 75
码字总数 41243
作品 0
深圳
程序员
私信 提问
大白话讲解Promise(三)搞懂jquery中的Promise 一文 的学习+新领悟

原文地址:http://www.cnblogs.com/lvdabao/p/jquery-deferred.html?utmsource=tuicool&utmmedium=referral 看过第一篇,再看jquery领悟很多。 jquery的defferd和ES6中的有很大不同,概念类似...

noonoo
2016/04/02
111
0
mpvue学习笔记-之微信小程序数据请求封装

简介 美团出品的mpvue已经开源出来很久了,一直说要进行一次实践,这不最近一次个人小程序开发就用上了它。 看了微信官方的数据请求模块--request,对比了下get和post请求的代码,发现如果在...

愿爱无忧dk_
2018/05/31
0
0
大白话讲解Promise(一)

去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使...

snowing1990
2016/03/16
120
0
JavaScript 异步

JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过分页形式获取列表。...

掘金官方
2018/01/02
0
0
爬虫系列的总结

图片来自 unsplash 时光荏苒,四个月时间如流沙般从手心中流逝。这四个月自己算是收获颇多。因为在张哥的影响下,自己渐渐喜欢上写作。自己将所学的爬虫知识、学习心得以及如何学习分享出来。...

猴哥Yuri
2017/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
22分钟前
4
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0
VUE 计算属性

本文转载于:专业的前端网站▶VUE 计算属性 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>vue示例</title> </hea......

前端老手
昨天
7
0
快速搭建LNMT平台和环境部署 Tomcat详解

Tomcat部署的基本概念 1. CATALINA_HOME与CATALINA_BASE分别指什么?     CATALINA_HOME指的是Tomcat的安装目录     bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/start...

网络小虾米
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部