Promise注意点
一、
Promise API 概述
var p = new Promise( function(resolve,reject){
// resolve(..) 用于决议 / 完成这个 promise
// reject(..) 用于拒绝这个 promise
} );
reject(..) 就是拒绝这个 promise ;但 resolve(..) 既可能完成 promise ,也可能拒绝,要
根据传入参数而定。如果传给 resolve(..) 的是一个非 Promise 、非 thenable 的立即值,这个 promise 就会用这个值完成。但是,如果传给 resolve(..) 的是一个真正的 Promise 或 thenable 值,这个值就会被递归展开,并且(要构造的) promise 将取用其最终决议值或状态
二、
var p = Promise.resolve(42);
p.then(
function fulfilled(msg) {
// 数字没有 string 函数,所以会抛出错误
console.log(msg.toLowerCase());
},
function rejected(err) {
// 永远不会到达这里
}
);
msg.toLowerCase() 合法地抛出一个错误,为什么我们的错误处理函数没有得到通知呢?正如前面解释过的,这是因为那个错误处理函数是为 promise p 准备的,而这个 promise 已经用值 42 填充了。 promise p 是不可变的,所以唯一可以被通知这个错误的 promise 是从 p.then(..) 返回的那一个,但我们在此例中没有捕捉。
为了避免丢失被忽略和抛弃的 Promise 错误,一些开发者表示, Promise 链的一个最佳实践就是最后总以一个catch(..) 结束,比如:
var p = Promise.resolve(42);
p.then(
function fulfilled(msg) {
// 数字没有 string 函数,所以会抛出错误
console.log(msg.toLowerCase());
},
function rejected(err) {
// 永远不会到达这里
}
).catch(function(err){
console.log(err);
})
四、对方法进行Promise包装
if(!Promise.wrap){
Promise.wrap = function(fn){
return function(){
var args = [].slice.call(arguments);
return new Promise(function(resolve,reject){
fn.apply(null,args.concat(function(err,v){
if(err){
reject(err);
}else{
resolve(v);
}
}))
})
}
}
}
function myajax(url,cb){
$.ajax({
url: url,
type: 'GET',
})
.done(function(data) {
cb(null,data)
})
.fail(function(err) {
cb(err)
})
}
var request = Promise.wrap(myajax);
request('api/xxx')
欢迎加入大前端交流群!群号:277942610
Promise注意点的更多相关文章
- Javascript - Promise学习笔记
最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下. 一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...
- 路由的Resolve机制(需要了解promise)
angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...
- 闲话Promise机制
Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...
- 深入理解jQuery、Angular、node中的Promise
最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...
- Promise的前世今生和妙用技巧
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...
- JavaScript进阶之路——认识和使用Promise,重构你的Js代码
一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半 ...
- 细说Promise
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- angular学习笔记(二十八-附2)-$http,$resource中的promise对象
下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...
随机推荐
- Linux一行命令处理批量文件
前言 最好的方法不一定是你最快能想到的.这里提供一种使用sed命令构造命令解决处理批量文件的技巧,供参考. 需求案例1 将当前目录下所有的0_80_91.txt.0_80_92.txt.0_80_93 ...
- Maven 打包项目 部署到服务器 重启服务 插件
1.maven插件wagon-maven-plugin自动部署远程Linux服务器 (http://xxgblog.com/2015/10/23/wagon-maven-plugin/) <p ...
- Django系列之web应用与http协议
第一节:最简单的web应用程序 web应用程序指供浏览器访问的程序,通常也简称为web应用.应用程序有两种模式C/S,B/S.C/S是客户端/服务器程序.也就是说这类程序一般独立运行.而B/S就是浏览 ...
- 第一次C语言程序设计
C语言程序实验报告 实验项目: 1.字符与ASCII码 2.运算符与表达式的应用 3.顺序结构应用程序 4.数学函数的算法描述 5.鸡兔同笼的算法描述 6.确定坐标的算法描述 姓名:张时锋 实验地点: ...
- 大数据入门到精通16--hive 的条件语句和聚合函数
一.条件表达 case when ... then when .... then ... when ... then ...end select film_id,rpad(title,20," ...
- 第三篇 Flask 中的 request
第三篇 Flask 中的 request 每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前 ...
- LeetCode Smallest Range
数据范围是3500,3500也就是说n的平方是可以接受的.这里告诉你就是有序的,也就是在提醒你可能会是一个类似于二分的算法,所以的话其实基于这两个认识的话我们就可以利用一个枚举叫二分的算法来解决这道题 ...
- SCRUM管理之KPI与OKRs结合
以下内容是本人在担任ScrumMaster中的实际应用,供大家交流学习参考. 目录 1绩效考核原则 4 2绩效考核范围 4 3绩效计算 4 3.1KPI 4 3.1.1KPI指标评分表 4 3.1.2 ...
- python的argpare和click模块详解
一.argparse模块 1.模块说明 # argparse是python的标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块,argparse能够根据程序中的定义的sys.ar ...
- nio实现原理
nio是事件驱动,当soket有消息过来时才开启线程,bio每当有连接时,就开启一个线程,长连接的话,就有太多的空闲连接占用线程内存 nio是非阻塞长连接 ServerSocketChannel:饭店 ...