(4)vue中的Promise

Promise

     1.介绍

  • es6引入,异步编程的解决方案。

  • promise中的执行代码会有两个参数:resolve和reject。

  • resolve调用后,会执行then后面的代码。

  • reject调用后,会执行catch后面的代码
// 第一种写法
new Promise((resolve,reject)=>{
    setTimeout(()=>{
        console.log(‘test1‘)
        // resolve(‘test2‘)
        reject()
    },1000)
}).then((data)=>{
    console.log(data)
}).catch(()=>{
    console.log(‘catch!‘)
})

// 第二种写法:直接传两个参数对应resolve和reject
new Promise((resolve,reject)=>{
    setTimeout(()=>{
        console.log(‘test1‘)
        // resolve()
        reject()
    },1000)
}).then(()=>{
    console.log(‘test2‘)
},()=>{
    console.log(‘test3‘)
})

       2.链式调用

  • 链式调用写法:

  • //第一种嵌套写法
    new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(‘aaa‘)
        },1000)
    }).then((data)=>{
        console.log(data+‘第一行处理代码‘)
        return new Promise((resolve)=>{
            resolve(data+‘111‘)
        })
    }).then((data)=>{
        console.log(data+‘第二行处理代码‘)
        return new Promise((resolve)=>{
            resolve(data+‘222‘)
        })
    }).then((data)=>{
        console.log(data+‘第三行处理代码‘)
    })
    
    //第二种:第一种写法的简写
    new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(‘aaa‘)
        },1000)
    }).then((data)=>{
        console.log(data+‘第一行处理代码‘)
        return Promise.resolve(data+‘111‘)
    }).then((data)=>{
        console.log(data+‘第二行处理代码‘)
        return Promise.resolve(data+‘222‘)
    }).then((data)=>{
        console.log(data+‘第三行处理代码‘)
    })
    
    //第三种:第二种写法的简写
    new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(‘aaa‘)
        },1000)
    }).then((data)=>{
        console.log(data+‘第一行处理代码‘)
        return data+‘111‘
    }).then((data)=>{
        console.log(data+‘第二行处理代码‘)
        return data+‘222‘
    }).then((data)=>{
        console.log(data+‘第三行处理代码‘)
    })

    3.Promise的三种状态

    • 异步操作之后会有三种状态。

    • pending:等待状态,比如正在进行网络请求。

    • fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()。

    • reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()。

    4.等待多个异步结果

    • 通过Promise.all()方法,可以等待多个任务执行结束后再进行处理

      Promise.all([
          new Promise((resolve,reject)=>{
              setTimeout(()=>{
                  resolve(‘t1‘)
              },5000)
          }),
          new Promise((resolve,reject)=>{
              setTimeout(()=>{
                  resolve(‘t2‘)
              },1000)
          })
      ]).then((results)=>{
          console.log(results)
      })

      更多promise的异步实例:https://www.hangge.com/blog/cache/detail_1638.html

(4)vue中的Promise

上一篇:slice数据结构


下一篇:第一篇 -- VS Code和golang的下载和安装