js中format用法_JS中promise的基础用法

本文介绍了Promise如何帮助优化多个AJAX请求的处理,通过实例展示了如何将回调函数独立出来实现链式调用,以及如何利用Promise.all处理无关联的多个请求。Promise使得异步编程更加简洁和易于理解。
摘要由CSDN通过智能技术生成

pormise在我看来,主要来优化存在多个ajax请求时,可以把回调函数给独立出来,统一调用。

比如在以前,我们在进行多个ajax请求时,第二个请求需要用到第一个请求返回的数据时,我们通常是这样的:

        $.ajax({
url: 'xxx.php',
method: 'post',
data: {page:1},
datatype: 'json',
success: (res) => {var id = res.id;//得到请求返回的数据,进行第二次请求
$.ajax({
url: 'xxx.php',
method: 'post',
data: { id: id },
datatype: 'json',
success: (res) => {}})},
error: (err) => {}});

可能有人优化会对ajax做个函数的封装,但实际还是嵌套的,promise就能把回调函数给独立出来,然后链式调用。

我们优化一下上面的代码:

        var promise = new Promise(function (resolve, reject) {
$.ajax({
url: '/Dome/Json.ashx',
method: 'get',
datatype: 'json',
success: (res) => {
console.log("Json.ashx");var obj = JSON.parse(res);resolve(obj[1].ID);},
error: (err) => {reject("/Dome/Json.ashx");}});});function handler(data=1) {var promise1 = new Promise(function (resolve, reject) {
$.ajax({
url: '/ashx/PageHandler.ashx',
method: 'get',
data: {page:data},
datatype: 'json',
success: (res) => {
console.log("PageHandler.ashx");resolve(res);},
error: (err) => {reject("/ashx/PageHandler.ashx");}});});return promise1;}function failed(url) {
console.log(`请求失败:${url}`);}//调用
promise.then(handler, failed).then(function (data) {
console.log(data);}, failed)

这里首先来解释一下上面的代码:

首先实例一个Promise对象,然后有两个参数,第一个为resolve,第二个为reject,前者一般为成功的时候调用,后者是失败的时候调用。

我们主要说调用那里的代码,then方法可以把回调函数分离出来,then函数有两个参数,均为函数,前者是请求成功的函数,后者是请求失败的函数。

这里第一次调用then,就执行第一个ajax请求,然后传入两个函数,handler和failed,这里是handler就是上面ajax的第二个请求,由于第一个ajax请求成功,调用了resolve函数,promise就会调用handler函数,如果请求失败,则进入reject,那就会调用failed函数。

然后还要讲的一个函数是promise的all函数。all函数主要用于多个请求的数据无关联的时候。

上述的代码不变,我们把调用改一下:

        //适用于多个ajax请求,但是每个ajax返回数据无关联的情况
Promise.all([promise, handler()]).then(function (result) {
console.log("结束");
console.log(result);})

all函数会等待全部请求完成之后,才完成回调,数据则在result中用数组的形式返回。

数组中的数据是每个resolve中每个传入的数据。

f2d2852a5dd16e9774b855d679b20d81.png

promise不止用于异步请求,很多场景都可以用,需要大家灵活应用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值