promise一直不知道他有什么用看了很多文章都是说解决回调地狱的好方法
那我们来看看他怎么用吧
一、 Promise对象有三种状态,他们分别是:
- pending: 等待中,或者进行中,表示还没有得到结果
- resolved(Fulfilled): 已经完成,表示得到了我们想要的结果,可以继续往下执行
- rejected: 也表示得到结果,但是由于结果并非我们所愿,因此拒绝执行
这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆。在Promise对象的构造函数中,将一个函数作为第一个参数。而这个函数,就是用来处理Promise的状态变化。
new Promise(function(resolve, reject) { if(true) { resolve() }; if(false) { reject() }; })
上面的resolve和reject都为一个函数,他们的作用分别是将状态修改为resolved和rejected。
二、 Promise对象中的then方法,可以接收构造函数中处理的状态变化,并分别对应执行。then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。
function fn(num) { return new Promise(function(resolve, reject) { if (typeof num == 'number') { resolve(); } else { reject(); } }).then(function() { console.log('参数是一个number值'); }, function() { console.log('参数不是一个number值'); }) } fn('hahha'); fn(1234);
then方法的执行结果也会返回一个Promise对象。因此我们可以进行then的链式执行,这也是解决回调地狱的主要方式。
谢谢https://www.jianshu.com/p/fe5f173276bd提供的案例
下面我来通俗易懂的讲一下吧
就是这么简单
后期更新async与await
好久不见,很久没有更新博园了
最近完善一下async和await
我们看到了async的返回的是一个promise 对象,如果要获取到promise 返回值,我们应该用then 方法
你看是不是就出来了
好,那我们来看看他怎么和await配合吧
这里可以看到yibu返回的是一个promise
然而我们要知道await必选要在async函数里面才能使用
那为什么startest里面会有try catch呢
这是为了捕获promise的resolve
当我们yibu的参数填1的时候过两秒控制台就会打印“你好”
没错就是这么简单