promise
Posted rickyctbur
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了promise相关的知识,希望对你有一定的参考价值。
概念:Promise主要解决了异步调用互相依赖,就是常说的死亡回调。当你调用一系列异步方法时,使用promise可以让多个操作按照你的想法执行,实现序列化。
Promise有3种状态:
- Pending:进行中
- Resolved(Fulfilled):已完成
- Rejected:已失败
Promise构造器接受一个函数作为参数,这个函数有两个参数:resolve,reject,分别代表这个Promise实例成功之后的回调函数和失败之后的回调函数。
let promise = new Promise(function (resolve, reject) var a = 1 if (a == 1) resolve(a) else reject(error) ) promise.then(function (value) console.log(value); ).catch(function (error) console.log(error); ) // 结果输出 1
promise多步调用:
let ajax=function() console.log(‘执行‘); return new Promise(function(resolve) setTimeout(function () resolve() , 2000); ) ; ajax() .then(function() console.log("第一次then") return new Promise(function(resolve) setTimeout(function () resolve() , 2000); ); ) .then(function() console.log("第二次then") return new Promise(function(resolve) setTimeout(function () resolve() , 2000); ); ) .then(function() console.log(‘执行结束‘) )
捕获错误:
var promise = new Promise(function (resolve, reject) let a = 7 if (a < 5) resolve(a) else reject() ) promise.then(function (value) console.log(value++) return value ).catch(function (error = ‘出错了‘) console.log(error) )
案例1:Promise.all 方法 (作用:在指定的所有Promise实例完成后执行)
let add1 = () => console.log(‘执行1‘); return new Promise(function(resolve) setTimeout(function() console.log("执行1完成") resolve() ,2000) ) let add2 = () => console.log(‘执行2‘); return new Promise(function(resolve) setTimeout(function() console.log(‘执行2完成‘) resolve() ,2000) ) Promise.all([ add1(), add2() ]).then(() => setTimeout(() => console.log("执行结束") ,2000) )
案例2:Promise.race 方法(作用:在指定的所有Promise实例中任何一个实例完成后执行)
let add1 = () => console.log(‘执行1‘); return new Promise(function(resolve) let timer = setTimeout(function() console.log("执行1完成") resolve() ,5000) ) let add2 = () => console.log(‘执行2‘); return new Promise(function(resolve) let timer = setTimeout(function() console.log(‘执行2完成‘) resolve() ,2000) ) Promise.race([ add1(), add2() ]).then(() => setTimeout(() => console.log("执行结束") add1 = null add2 = null ,2000) )
以上是关于promise的主要内容,如果未能解决你的问题,请参考以下文章