promise的使用

promise是什么?
 它是一个对象,有三种状态:
  pending: 初始状态,不是成功或失败状态。
  pfulfilled: 意味着操作成功完成。
  rejected: 意味着操作失败。

有什么作用?

  1. 主要用于异步计算
  2. 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
  3. 可以在对象之间传递和操作promise,帮助我们处理队列

优缺点
 优点:

  1. 异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
  2. Promise 对象提供统一的接口,使得控制异步操作更加容易。

 缺点:

  1. 无法取消 Promise,一旦新建它就会立即执行,无法中途取消
  2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部
  3. 当处于 Pending 状态时,无法得知目前进展到哪一个阶段

promise的创建

const promise = new Promise(function(resolve, reject) {
    //写异步操作代码
    //结果使用resolve,reject处理
}).then(function(result) {
   //接受resolve调用的值
}).catch(function(err) {
    //接受reject调用的值
})

实例

const promise = new Promise(function(resolve, reject) {
     //写异步操作代码
     //结果使用resolve,reject处理
     setTimeout(function() {
         resolve('resolve');
     }, 1000);
 }).then(function(result) {
     //接受resolve调用的值
     console.log(result);//打印resolve
 }).catch(function(err) {
     //接受reject调用的值
     console.log(err);
 })

  注意:如果同时写了resolve和reject,谁先写的,就会执行谁,不会执行完之后再去执行另一个,promise状态只能改变一次。

promise常见面试题

console.log(1);
const promise = new Promise(function(resolve, reject) {
    console.log(2);
    setTimeout(function() {
         console.log(4);
    }, 1000);
    resolve(3);
    console.log(5);
}).then(function(result) {
    console.log(result);
})
console.log(6);
//打印125634

解析:按照从上倒下优先执行顺序,首先打印的是1,2,5,6;js中先运行主线程的程序,再运行事件队列中的程序;promise和定时器都属于事件队列,其中,在js中promise是微队列,定时器是宏队列,微队列要比宏队列优先执行,所以其次打印的是3,4。最后打印的结果是:1、2、5、6、3、4

promise简单写法

async function promise() {
  return await 1;
}
promise().then(function(resolve) {
    console.log(resolve);
}).catch(function(err) {
    console.log(err);
})

async相当于是new Promise对象,await相当于是resolve或者reject,这个比较简单,但是有一点需要注意的是,它的状态不可控,你不知道promise现在的状态是什么,可能是pfulfilled状态,也可能是rejected状态,所以你需要同时监听两种状态

promise方法
Promise.all方法

var p = Promise.all([p1,p2,p3]);

Promise.all 方法接受一个数组作为参数,p1、p2、p3 都是 Promise 对象的实例。(Promise.all 方法的参数不一定是数组,但是必须具有 iterator 接口,且返回的每个成员都是 Promise 实例。)
p 的状态由 p1、p2、p3 决定,只有状态都是fulfilled,p的状态才是fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数;否则p状态就是rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

var p = Promise.race([p1,p2,p3]);

该方法是只要有一个实例状态先改变,p的状态就改变,先改变的实例返回值就会传递给p的返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值