Promise ——主要用于把异步请求数据改成同步执行 异步操作:操作之间没啥关系,可以进行多个操作。代码复杂一些
同步操作:同时只能做一件事情。代码相对简单一些
基本用法:
var p= new Promise(function (resolve, reject) {
//异步请求内容-事件,ajax,定时器
resolve("成功!");
// reject("失败!");
})
// promise用同步代替异步执行
p.then(function (res) { //成功回调
console.log(res);
//成功
}, function (err) { //失败回调
console.log(err);
})
ajax回调地域问题(一层一层嵌套不优雅):
ajax('/banners', function (banner_data){
ajax('/hotItems', function (hotitem_data){
ajax('/slides', function (slide_data){
ajax('/slides', function (slide_data){}, function (){
alert('读取失败');
});
}, function (){
alert('读取失败');
});
}, function (){
alert('读取失败');
});
}, function (){
alert('读取失败');
});
promise可解决回调地域问题,通过promise封装ajax方法
function getAjax(url2){
return new Promise(function(resolve,reject){
$.ajax({
url:url2, //url可通过外面传入
success:function(res){
resolve(res) //成功回调
},
error:function(err){
reject(err) //失败回调
}
})
})
}
//然后通过同步的方式调用
var arr=getAjax('data/arr.txt')//同步执行
var arr2=getAjax('data/num.txt')//同步执行
【promise|promise和async+await】//1.1 es7中新增 async 函数,它返回一个 Promise 对象。它更简介,也可把异步执行改成同步执行
!!!注意,只能在函数外使用。async内部相当于封装了promise对象
//2.1 除了async外,还有一个叫await 。await的功能相当于代替promise中.then执行的内容。要的是异步执行的内容
// !!!注意问题 ,如果有await必须有async。async要放在await最近一个函数的外面
async function show(){
var a1= await $.ajax({url: ‘data/1.json’}) //{a:7}
console.log(a1) //{a: 7} {b:5} {c: 99}
}
show()
//3.1 用async,await实现promise功能
async function getAsync(){
var a1= await $.ajax({url: ‘data/1.json’}) //{a:7}
var a2= await $.ajax({url: ‘data/2.json’})
var a3= await $.ajax({url: ‘data/3.json’})
console.log(a1,a2,a3) //{a: 7} {b:5} {c: 99}
}
getAsync()
推荐阅读
- 前端|Promise实现
- 前端|Element-UI(el-table样式修改)
- JavaScript 自动获取所有a标签,并新标签打开
- JavaScript 获取当前周数
- JavaScript 时间戳格式化为日期或时间
- Vue.js|Vue3.0 + Vite + Ant Design Vue + TypeScript 管理后台vue-vben-admin
- react-redux|「源码解析」一文吃透react-redux源码(useMemo经典源码级案例)
- cesium实战|cesium 三维坐标系绘制
- 笔记|算法题JavaScript(回文数)