Promise 详解

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

Promise 是一个对象,从它可以获取异步操作的消息。

function promise () {
    new Promise(() => {
        setTimeout(() => {
            console.log(100)
        }, 5000)
    })
    console.log(0)
}
promise() // 这种一般是回调函数
console.log(1)
// 0 1 100

因此,在上述代码中,当 promise() 方法被调用且离开函数进入下一步操作的时候,内部的 promise 其实还没完成

对上述代码进行改进

function promise () {
    return new promise(() => {
        setTimeout(() => {
            console.log(100)
        }, 5000)
    })
}
promise() // 这种一般是回调函数

在上述代码中,当 promise() 方法被调用且完成的时候,也就是 promise 新建完成的时候,也就是异步操作完成的时候,那么就可以实现 then() 的链方法

如果then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例),可以采用链式写法

Promise 的三种状态

pending(进行中)、fulfilled(已成功)和rejected(已失败)。Promise对象代表一个异步操作,只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

promise() 也可以包含非异步的操作,也同样可以resolve,reject. 但没什么意义

相关知识点:
如下代码,请问能捕获到异常吗?

try {
   new Promise((resolve, reject) => {
     setTimeout(() => {
       reject(new Error('sb'))
     }, 5000)
   })
 }
 catch (err) {
   console.log(err)
 }

答案:不能,因为try {} catch {} 只能捕获同步代码错误

改进方法:
用 async 与 await 将其变为同步代码

async function catchErr () {
try {
   await new Promise((resolve, reject) => {
     setTimeout(() => {
       reject(new Error('sb'))
     }, 5000)
   })
 }
 catch (err) {
   console.log(err)
 }

猜你喜欢

转载自blog.csdn.net/weixin_38788347/article/details/80017247