Promise可以进行异步操作,比起回调函数,更加容易维护。

首先创建一个简单的Promise

var p = new Promise( () => {});

console.log(p);  //会打印一个promise对象,状态是pending,状态值是undefined

如果Promise构造函数里没有参数将会报错

promise有三个状态,分别是pending,resolved和rejected。

var p = new Promise((res,rej) => { //里面有俩个参数,是俩个函数,一个表示成功的,一个表示失败的
res(200);
}) console.log(p); //打印promise对象,状态是成功,状态值是200

promise任务链

var p = new Promise((res,rej) => { res() }); //promise链式,可以一直then,如果有一次状态为失败,就会执行catch
p.then(() => {
console.log(1);
}).then(() => { //then本身是返回一个promise,也可以自己return一个新的promise实例
return new Promise((res,rej) => {
rej(100);
})
}).then(() => {
console.log(3)
}).catch((data) => {
console.log(data);
)};

打印的是1和100,p拥有一个then方法,并且他还会返回一个promise,可以进行链式操作,如果中途有个rejected状态,就会执行catch,并且后面的不在执行

执行顺序

console.log(1);  

setTimeout(() => {
console.log(2);
}) setTimeout(()=> {
console.log(3);
}) var p = new Promise((res,rej) => {
console.log(4);
res();
})
p.then(()=>{
console.log(5)
}) console.log(6);

打印的顺序是1,4,6,5,2,3

js从上到下执行,第一个打印1,后面有俩个定时器,还有直接打印的和promise,定时器有延迟执行,会放到队列里,promise创建的时候回里面执行参数里面的代码,就会打印4

然后打印6,之后会打印5,最后会打印队列里的俩个定时器2,3

宏任务 : 主体js,setTimeout(setTimeout里面的函数是异步的),setInterval;
微任务 : Promise后面的then和catch,process.nextTick

promise的静态方法

var p1 = new Promise((res,rej) => {
setTimeout(() => {
res('1');
},1000)
}) var p2 = new Promise((res,rej) => {
setTimeout(() => {
res('2');
},2000)
}) var p3 = new Promise((res,rej) => {
setTimeout(() => {
res('3')
},500)
}) var p4 = Promise.all([p1,p2,p3]); p4.then((data) => {
console.log(data); //['1','2','3']
}) console.log(p4); //打印一个promise对象

Promise.all()他可以让参数里面的所有promise最后同时进行

并且还有rece方法,他会执行里面最快的一个promise

Promise使用的更多相关文章

  1. Javascript - Promise学习笔记

    最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下.   一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...

  2. 路由的Resolve机制(需要了解promise)

    angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...

  3. angular2系列教程(七)Injectable、Promise、Interface、使用服务

    今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...

  4. 闲话Promise机制

    Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...

  5. 深入理解jQuery、Angular、node中的Promise

    最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...

  6. Promise的前世今生和妙用技巧

    浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...

  7. JavaScript进阶之路——认识和使用Promise,重构你的Js代码

    一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半 ...

  8. 细说Promise

    一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

  10. angular学习笔记(二十八-附2)-$http,$resource中的promise对象

    下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...

随机推荐

  1. try 和 catch 和 finally

    try块中出现异常走进catch,异常后面的代码不会再被执行:finally块里try和catch执行完后要执行的代码,且一定会执行. 在释放资源的时候,不要多个放在一个try块里面. 流的关闭顺序: ...

  2. HTML 5 拖放 drag dragend dragover ....

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. // http://www.w3school.com.cn/html5/html_5_draganddrop.asp dataTrans ...

  3. finance1:专业词汇

    1,沙盘演练:沙盘演练又叫沙盘模拟培训.沙盘推演,源自西方军事上的战争沙盘模拟推演,是通过引领学员进入一个模拟的竞争性行业,由学员分组建立若干模拟公司,围绕形象直观的沙盘教具,实战演练模拟企业的经营管 ...

  4. zabbix报错排错大全

    zabbix报错 https://www.cnblogs.com/losbyday/category/876878.html作者总结的很全棒 1.在启动zabbix-agent 时系统日志输出 PID ...

  5. NOIP2018提高组初赛知识点

     (传说,在神秘的初赛中,选手们经常互相爆零以示友好……) 历年真题:ti.luogu.com.cn 以下标题中打*的是我认为的重点内容 一.关于计算机 (一)计算机组成 硬件组成: 1. 控制器(C ...

  6. mybatis BindingException: Invalid bound statement (not found)

    错误截图 解决措施 此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的. 通常我们在配置SqlSessionFactory时会有如配置 <!-- 配置Sq ...

  7. 【Common】NO.81.Note.1.Common.1.002-【文章摘要】

    1.0.0 Summary Tittle:[Common]NO.81.Note.1.Common.1.002-[文章摘要] Style:Common Series:Common Since:2018- ...

  8. 【UML】NO.54.EBook.6.UML.2.002-【Thinking In UML 大象 第二版】- UML 核心元素

    1.0.0 Summary Tittle:[UML]NO.54.EBook.6.UML.2.002-[Thinking In UML 大象 第二版]- UML 核心元素 Style:DesignPat ...

  9. Cocos Creator Slider(进度条)的三种实现

    实现原理: 方法一:动态计算,slider上增加背景图,根据滑动的进度动态计算背景图的大小:方法二:slider+progress,根据slider滑动的进度,动态改变progress的显示进度:方法 ...

  10. st2_057

    http://vulapps.evalbug.com/s_struts2_s2-057/ 这大概是全网复现st2-057环境最简单的操作了. 不过首先,你需要安装过docker,安装方法参考官方文档h ...