困惑我多时的Promise和async与await

promise一直不知道他有什么用看了不少文章都是说解决回调地狱的好方法javascript

那咱们来看看他怎么用吧java

1、 Promise对象有三种状态,他们分别是:promise

  • pending: 等待中,或者进行中,表示尚未获得结果
  • resolved(Fulfilled): 已经完成,表示获得了咱们想要的结果,能够继续往下执行
  • rejected: 也表示获得结果,可是因为结果并不是咱们所愿,所以拒绝执行

这三种状态不受外界影响,并且状态只能从pending改变为resolved或者rejected,而且不可逆。在Promise对象的构造函数中,将一个函数做为第一个参数。而这个函数,就是用来处理Promise的状态变化。async

new Promise(function(resolve, reject) {
    if(true) { resolve() };
    if(false) { reject() };
})

上面的resolve和reject都为一个函数,他们的做用分别是将状态修改成resolved和rejected。函数

 

2、 Promise对象中的then方法,能够接收构造函数中处理的状态变化,并分别对应执行。then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。spa

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的链式执行,这也是解决回调地狱的主要方式。code

谢谢https://www.jianshu.com/p/fe5f173276bd提供的案例对象

下面我来通俗易懂的讲一下吧blog

就是这么简单

ip

后期更新async与await

很久不见,好久没有更新博园了

最近完善一下async和await

咱们看到了async的返回的是一个promise 对象,若是要获取到promise 返回值,咱们应该用then 方法

 

你看是否是就出来了

好,那咱们来看看他怎么和await配合吧

这里能够看到yibu返回的是一个promise

然而咱们要知道await必选要在async函数里面才能使用

那为何startest里面会有try catch呢

这是为了捕获promise的resolve

当咱们yibu的参数填1的时候过两秒控制台就会打印“你好”

没错就是这么简单

相关文章
相关标签/搜索