Promise三种类型

  Constructor

  使用Promise构造器来实例化一个promise对象

  

 var promise = new Promise(function(resolve,reject){
//异步处理
//处理结束,成功调用resolve,失败调用reject
})

  Instance Method

  promise实例对象处理成功或者失败的回调函数

  

promise.then(onFulfilled,onRejected)
// resolve(成功)回调函数 onFulfilled
// reject (失败)回调函数 onRejected promise.catch(onRejected)
//reject(失败)时,对异常的处理 onRejected

  Static Method

  Promise作为全局对象还有静态方法

  

Promise.all()
Promise.resolve()
Promise.reject()

 

使用promise对象

  

function getUrl(url){
return new Promise((resolve,reject)=>{
$.ajax({
url:url,
method:'get',
success:function(res){
resolve(res)
},
error:function(err){
reject(err)
}
})
})
} var url = 'http://httpbin.org/get'
getUrl(url).then((res)=>{
//处理resolve(成功)的回调
console.log(res)
}).catch((err)=>{
//处理reject(异常)的回调
console.log(err)
})

Promise静态方法

  Promise.resolve

    • new Promise的快捷方式

      静态方法Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式

    

Promise.resolve(42).then(function(value){
console.log(value);
});

      Promise.resolve(value) 同样返回一个promise对象,并且会使这个对象从pending状态转为resolved状态

    • Thenable

      Promise.resolve静态方法的另一个作用就是将thenable对象转为promise对象,到底什么样的对象能算是thenable的呢,最简单的例子就是 jQuery.ajax(),它的返回值就是thenable的.因为jQuery.ajax() 的返回值是 jqXHR Object 对象,这个对象具有 .then 方法

   

function getUrl(url){
return Promise.resolve($.ajax(url))
}
var url = 'http://httpbin.org/get1'
getUrl(url).then((res)=>{
console.log(res)
}).catch((err)=>{
console.log(err)
})

  Promise.reject

    和Promise.resolve()一样是静态方法,是new Promise()的快捷方式

    

Promise.reject(new Error("BOOM!")).catch(function(error){
console.error(error);
});

  

每次调用then都会返回一个新创建的promise对象

  then的错误使用方法  

function badAsyncCall() {
var promise = Promise.resolve();
promise.then(function() {
// 任意处理
return newVar;
});
return promise;
}

  首先在 promise.then 中产生的异常不会被外部捕获,此外,也不能得到 then 的返回值,即使其有返回值。

  由于每次 promise.then 调用都会返回一个新创建的promise对象,应该采用promise chain的方式将调用进行链式化,修改后如下

  

function anAsyncCall() {
var promise = Promise.resolve();
return promise.then(function() {
// 任意处理
return newVar;
});
}

  

promise迷你书-读书笔记的更多相关文章

  1. JavaScript Promise迷你书(中文版)

    最近,发现了一个很不错的关于Promise介绍的迷你电子版书,分享给大家: http://liubin.org/promises-book/#chapter4-advanced-promise (篇幅 ...

  2. 第一本Docker书读书笔记

    日常使用命令 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: ...

  3. JavaScript Promise迷你书(中文版)--再学习

    上次粗翻了一下,感觉没吃透,这次深入体会一下. <script> function getURL(URL) { return new Promise(function(resolve, r ...

  4. 推荐一本迷你中文书《JavaScript Promise迷你书(中文版)》

    https://github.com/azu/promises-book http://it-ebooks24.com/ebook/mastering-javascript-promises 传值,调 ...

  5. 《javascript正则表达式迷你书》笔记

    字符匹配攻略 横向匹配--通过量词 {m,n} {m,} {m} ? + * 贪婪匹配 后面跟?号 惰性匹配 纵向匹配--通过字符组 \d \D \w \W \s \S . \w表示[0-9a-zA- ...

  6. Promise小书(长文)

    promise基础 Promise是异步编程的一种解决方案.ES6 Promise的规范来源于Promises/A+社区,它有很多版本的实现. Promise比传统的解决方案(回调函数和事件)更合理和 ...

  7. 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行

    搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...

  8. 深入浅出Nodejs读书笔记

    深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html cate ...

  9. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

随机推荐

  1. Amsterdam Distance

    题目描述 Your friend from Manhattan is visiting you in Amsterdam. Because she can only stay for a short ...

  2. file_get_contents为何无法采集某些压缩过的网站

    有些网站直接用file_get_contents就能采集, 但是有些不行. 于是可以在网址前加入 'compress.zlib://‘ $url = 'compress.zlib://' . 'htt ...

  3. xpath-helper 插件下载

    链接:https://pan.baidu.com/s/1YuTGrdwwAKQd2sIcuarBHQ 提取码:qb8p

  4. django框架基础-路由系统-长期维护

    ##################   路由系统介绍    ####################### 路由系统就是路径和函数的对应关系, 路由系统可以看成支撑你这个网站的目录,就像是一本书一样 ...

  5. 百度AI技术

    利用百度提供接口,实现智能语音 语音合成 -- TTS(text to speech) 注册 在 ai.baidu.com 页面中点击 控制台 ,弹出登陆 / 注册页面 创建应用 登陆成功后,点击左侧 ...

  6. [LC] 240. Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  7. java中字符串相等判断

    字符串的判断有2种: 1.判断地址是否相等  用:== 2.判断值是否相等  用:equals方法 Object类作为所有类的超类,而Object类的equals方法是直接比较地址的,源码如下: pu ...

  8. HDU-2802-F(N)

    看到这题讨论版里有说用公式的有说用循环节的,但是个人觉得这两种方法都不靠谱,比赛场上做这种题能直接推出公式需要很强数学功底,而循环节的方法如果循环节比较大就不太好发现了.这种已知通项公式的题还是用矩阵 ...

  9. ClassNotFoundException: org.apache.commons.logging.Log

    参考: https://bbs.csdn.net/topics/392090371 omcat无法启动,报如下错误: 严重: A child container failed during start ...

  10. 吴裕雄--python学习笔记:通过sqlite3 进行文字界面学生管理

    import sqlite3 conn = sqlite3.connect('E:\\student.db') print("Opened database successfully&quo ...