一、promise入门

1. Promise对象是什么

回调函数的另一种原生实现,比之前回调函数的写法机构清晰,功能强大,

2.以前回调这么写

function a(fn){
let h = 1;
setTimeout(function(){
if(h==1){
fn(h)
}else{
throw Error('error!')
}
},1000)
}
//调用
a(function(m){
console.log(m+'callback')
})

3.用Promise 写回调

 function a(){
return new Promise(function(resole,reject){
setTimeout(function(){
if(h==1){
resole(h)
}else{
reject(error)
}
},1000)
})
}
//调用
a().then(function(data){
console.log(data)
},function(err){
console.log(err)
})

4.多层回调实现

//函数封装
function fn(n,callback){
setTimeout(function(){
callback(n)
},1000)
}
function fn2(m,callback){ setTimeout(function(){
callback(m)
},800)
}
function fn3(h,callback){
setTimeout(function(){
callback(h)
},600)
}
//多层回调调用 fn(1, function(n){ console.log('fn='+n);
fn2(2,function(n2){ console.log('fn2='+n2);
fn3(3,function(n3){ console.log('fn3='+n3)
console.log('end')
})
})
});

可见(1)中多层回调写起来很乱,不利于维护,下面用Promise实现

function pm(n){
return new Promise(function(resolve,reject){
setTimeout(function(){
if(n){
resolve(n)
}else{
reject(error)
}
},1000)
})
}
function pm2(n){
return new Promise(function(resolve,reject){
setTimeout(function(){
if(n){
resolve(n)
}else{
reject(error)
}
},1000)
})
}
function pm3(n){
return new Promise(function(resolve,reject){
setTimeout(function(){
if(n){
resolve(n)
}else{
reject(error)
}
},1000)
})
} //调用
pm(1).then(function(data){
console.log('pm='+data);
return pm2(2) }).then(function(data){
console.log('pm2='+data);
return pm3(3) }).then(function(data){
console.log('pm3='+data); })

用promise调用的写法更加直观

二、Generator

1.Generator函数

(1)异步编程思想来写同步代码
(2)遍历器生成函数
(3)状态机,封装了多个内部状态。

2.形式

function* abc(){
//yield 非必须,return 也非必须;
yield 'a';
yield 'b';
return 'c'
}
//调用
var h = abc();
h.next();//{value:'a',done:false}
h.next();//{value:'b',done:false}
h.next();//{value:'c',done:true}
h.next();//{value:undefined,done:true}

3.把Promise用Generator函数表示

function pm(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},1000)
}) }
function pm2(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},800)
})
}
function pm3(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},600)
})
} function* gPm(){
yield pm(1);
yield pm2(2);
yield pm3(3);
}
let p = gPm();
p.next().value.then(function(){
p.next().value.then(function(){
p.next().value.then(function(){ })
})
})

在调用的时候用Generator函数;代码更加同步化

三、async/await

1. async/await是什么

(1)异步操作的终极解决方案

2. 写法

function pm(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},1000)
}) }
function pm2(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},800)
})
}
function pm3(n){
return new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(n)
resolve()
},600)
})
} async function p(){
await pm(1)
await pm2(2)
await pm3(3)
}
p()

四、总结

不管用then还是用generator 还是用async,都保证你写的function 的返回值是一个**promise**对象

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=f12524hxoqvv

深入理解es6的promise的更多相关文章

  1. 深入理解ES6里的promise

    一.ES6 Promise是什么? 复杂的概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受.那么第一个问题来了,Promise是什么呢?是一个类?对象?数组?函数? 别猜了,直接打印出 ...

  2. 关于ES6的Promise的使用深入理解

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  3. ES6的promise对象研究

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  4. 全面理解Javascript中Promise

    全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ...

  5. 浅谈ES6原生Promise

    浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...

  6. ES6之Promise用法详解

    一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...

  7. ES6新增"Promise"可避免回调地狱

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

  8. 教你如何使用ES6的Promise对象

    教你如何使用ES6的Promise对象 Promise对象,ES6新增的一个全新特性,这个是 ES6中非常重要的一个对象 Promise的设计初衷 首先,我们先一起了解一下,为什么要设计出这么一个玩意 ...

  9. 【读书笔记】【深入理解ES6】#11-Promise与异步编程

    异步编程的背景知识 JavaScript 引擎是基于单线程(Single-threaded)实际循环的概念构建的,同一时刻只允许一个代码块在执行. 所以需要跟踪即将运行的代码,那些代码被放在一个任务队 ...

随机推荐

  1. Arduino入门笔记(7):利用1602、1302实现时钟和定时器

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 常常听到老妈在做饭时说“开锅15分钟后叫我一下”,为何不做个定时器,来提醒老妈呢 ...

  2. python3 面向对象编程--类的封装和继承

    #python3import refrom urllib import requestimport os class PosterSpider(object):     def __init__(se ...

  3. WebHook之PHP实践@coding.net

    次写完代码, 打开FileZilla, 把写好的文件上传到vps上, 久而久之觉得腻烦, 寻思有没有更geek的方法, 便有此文. WebHook是跟随着Git而兴起的技术, 当你push到服务器的时 ...

  4. CoreFoundation对象的内存管理

    近来没什么新项目做,想学习一些swift开源项目,看了几个文件感觉有点懵,可能水平还没达到,等用到具体内容的时候再去仔细看吧. 关于现在的项目,想想单元测试还可以完善一下,就在framwork工程中写 ...

  5. 20155331《网路对抗》Exp8 WEB基础实践

    20155331<网路对抗>Exp8 WEB基础实践 基础问题回答 什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI ...

  6. 汇编 XOR运算

     XOR运算  按位异或^ 一.按位异或^ 运算符^ 1^1=0;0^0=0; //相同则为0 0^1=1;1^0=1; //不相同为1 1101^0110=1011; // asm_XOR.c ...

  7. SQL Server 全文搜索

    SQL Server 的全文搜索(Full-Text Search)是基于分词的文本检索功能,依赖于全文索引.全文索引不同于传统的平衡树(B-Tree)索引和列存储索引,它是由数据表构成的,称作倒转索 ...

  8. (功能篇)回顾Bug管理系统Mantis优化改造经历

    共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ...

  9. Anibei前端基础学习

    html.html5.CSS2.CSS3.JQuery.Vue.js学习,后端程序媛开始学习前端开发啦.

  10. Go语言简单学习

    GO 支持goroutine 和通道,并且推荐使用消息而不是共享内存来进行并发编程,总体来说,Go语言是一个非常现代化的语言,精小但非常强大 Go语言的主要特性: 1.自动垃圾回收 2.更丰富的内置类 ...