promise的用法

因为带有promise对象本身是一个构造函数,可以创建 带有状态的promise实例;

eg: let promise=new Promise(function(resolve,reject){

          异步操作;

          if(success){resolve(value)}

          else{reject(error)}

      })

其中:resolve和reject是封装好的函数,可直接调用;

promise对象有三种状态:pending(进行中),resolved(成功),rejected(失败);

resolve方法:将 promise状态从pending转为resolved ;并将异步操作的返回值以参数的形式输出到then中对应的callback;

reject方法:将promise状态从pending转为rejected,并将error从而执行then中对应的callback;


一)promise.prototype.then(callback1,callback2):根据promise的状态从而执行then中对应的回调;该方法返回一个promise实例;

resolved--->callback1=function(value){....}

rejected---->callback2=function(error{......} 

ps:promise 链式调用;

注意两点:

第一点:若then中回调的是非promise实例,则then方法返回的promise实例状态继承了上一个promise实例,且回调的返回值作为下一个then中对应状态回调的参数传入;

第二点:若then中回调返回的是promise实例,则then方法返回的实例由回调中返回的promise实例所代替;


二)promise.prototype.catch:

当调用了reject方法后或throw出一个异常时,都会领导promise状态变为rejected,且当promise状态为rejected是,可以调用catch方法捕捉,且返回一个状态为rejected的promise实例;

注意:当catch 抛出异常时,该方法返回的promise实例状态变为rejected


三)Promise.all:

将一系列的promise归成一个新的promise之中,只对新的promise处理即可;

语法:p=Promise.all([p1,p2,p3,....]);

注:不一定是数组形式,但成员一定是promise对象;

原则:

若p1,p2,p3都为resolved,则p为resolved,p1,p2,p3的返回值以数组的形式传入 callback中;

若p1,p2,p3其中一个rejected,则p为rejected,第一个为rejected的promise对象的返回值输出到对应的callback中


四)Promise.race:

语法:let p=Promise.race([p1,p2,p3]);

参数可以为数组,也可以为promise对象的遍历器;

注意:p的状态是由p1,p2,p3率先返回的状态的一个promise对象所决定的,并该promise对象的返回值作为p的返回值输送到对象的callback中;

ps:p1,p2,p3为竞争关系;


Promise是一种异步编程的解决方案,它可以避免回调地狱,使得异步操作更加清晰和易于维护。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当Promise处于pending状态时,可以转换为fulfilled或rejected状态,一旦转换为其中一种状态,就不可再转换为其他状态。 Promise的基本用法如下: ```javascript const promise = new Promise((resolve, reject) => { // 异步操作 if (/* 异步操作成功 */) { resolve(value); // 将Promise状态设置为fulfilled,并将异步操作的结果传递给回调函数 } else { reject(error); // 将Promise状态设置为rejected,并将错误信息传递给回调函数 } }); promise.then((value) => { // 异步操作成功时的回调函数 }, (error) => { // 异步操作失败时的回调函数 }); ``` 另外,Promise还提供了一些静态方法,如Promise.resolve和Promise.reject,可以方便地创建已经处于fulfilled或rejected状态的Promise对象,以及Promise.all和Promise.race等方法,可以处理多个Promise对象的状态。 下面是一个使用Promise的例子,通过异步加载图片并在加载完成后显示图片: ```javascript function loadImageAsync(url) { return new Promise((resolve, reject) => { const img = new Image(); img.onload = function() { resolve(img); }; img.onerror = function() { reject(new Error('Could not load image at ' + url)); }; img.src = url; }); } loadImageAsync('https://example.com/image.jpg') .then((img) => { document.body.appendChild(img); }) .catch((error) => { console.error(error); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值