1.概述
Promise是一步编程的一种解决方案,从语法上讲,promise是一个对象,从它可以获取异步的问题
Promise的优点:
可以避免多次异步调用嵌套导致的回调地域
提供了简洁的api,使得控制异步变得简单更加容易
详细promise使用规则https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
2.使用
实例化Promise对象,构造函数中传递参数,该函数用于传递异步任务
resolve和reject两个参数用于 处理成功和失败的两种情况,并通过p.then获取处理结果
代码实列:
1 var p = new Promise(function (resolve, reject) { 2 //用于实现异步任务 3 setTimeout(function () { 4 var flag = true 5 if (flag) { 6 resolve(‘成功‘) 7 } else { 8 reject(‘失败‘) 9 } 10 }) 11 },1000) 12 p.then(function (success) { 13 //这里面是成功了要执行的操作 14 console.log(success); 15 }, 16 function (error) { 17 //这里面是失败了要进行的操作 18 console.log(error); 19 })
3.使用Promise发送Ajax请求
先封装一个函数,可以重复调用。
1
4.Promise的实列方法
p.then()得到异步任务的正确结果
p.catch()获取异常信心
p.finally()无论正确还是错误都会执行(不是正式版本)
1 P().then(function (data) { 2 console.log(data); 3 }) 4 P().catch(function (data) { 5 console.log(data); 6 }) 7 p().finally(function (data) { 8 console.log(data); 9 })
5.Promise的对象方法
Promise.all()并发处理多个任务,所有任务都执行完成才能得到结果
Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果
all用法
1 var a=p(url1) 2 var b=P(url2) 3 var c=P(url3) 4 Promise.all([a,b,c]).then(function(data){ 5 console.log(data); 6 })
控制台得到的data是三个实列都执行完成后才会输出log
race用法
1 var a = p(url1) 2 var b = P(url2) 3 var c = P(url3) 4 Promise.race([a, b, c]).then(function (data) { 5 console.log(data); 6 })
其中只要有一个实列执行完成后就会输出log,用法跟all相同,只不过执行条件不同
原文:https://www.cnblogs.com/xiaopo/p/14333955.html