JavaScript —— ES6 -- Promise

1.什么是Promise

  • Promise是异步编程的一种解决方案。
  • Promise是一个对象,它代表了一个异步操作的最终完成或者失败。

2.基本用法

用定时器来模拟异步事件,成功的时候调用resolve

new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve("success")
    },1000)
}).then((data) => {
    console.log(data)
})

失败的时候调用reject

new Promise((resolve,reject) => {
    setTimeout(() => {
        reject("failed")
    },1000)
}).catch((data) => {
    console.log(data)
})
  • new Promise创建一个 Promise 对象
  • resolvereject 也是函数,我们会根据异步操作的结果来决定调用谁。如果是成功的,调用 resolve() ,之后的 then 会被回调。如果是失败的,调用 reject() ,之后的 catch 会被回调。

3.Promise三种状态

Promise有 pendingfulfilledrejected 三种状态,这三种状态是由异步操作的结果决定的。

  • pending(等待),比如正在进行网络请求或者定时器未到时间。
  • fulfilled(成功),主动回调了 resolve() ,就处于这个状态,并且之后会回调 then
  • rejected(失败),主动回调了 reject() ,就处于这个状态,并且之后会回调 catch

4.Promise的链式调用

new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve("timeout")
    },1000)
}).then((data) => {
    return data + "-aaa"
}).then((data) => {
    return data + "-bbb"
}).then((data) => {
    console.log(data)
    // timeout-aaa-bbb
})

5.Catch的链式操作

new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve("timeout")
    },1000)
}).then((data) => {
    throw 'error message'
    return data + "-aaa"
}).then(() => {
    return data + "-bbb"
}).catch((data) => {
    console.log(data)
    // error message
})

6.Promise.all

Promise.all接受Promise的数组,待数组里都执行完成后,执行then

Promise.all([
    new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve("promise1")
        },1000)
    }),
    new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve("promise2")
        },2000)
    })
    ]).then((data) => {
        console.log(data)
        //  2s后打印["promise1", "promise2"]
    })

7.Promise.race

Promise.race接受Promise的数组,当数组里面有一个执行完成,执行then

Promise.race([
    new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve("promise1")
        },1000)
    }),
    new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve("promise2")
        },2000)
    })
]).then((data) => {
    console.log(data)
    //  1s后打印promise1
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 12,790评论 1 56
  • 最早接触Promise概念是在创业公司,同事引入的Promise第三方库,用在用Swift写的工程中。 异步编程,...
    松哥888阅读 4,359评论 0 2
  • 关于Promise的基本内容,已经写过一篇文章。基本的会用,偶尔也用过,不过知识点比较多,并且代码在外面套了好几层...
    松哥888阅读 4,813评论 0 4
  • Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。 语法 new Prom...
    Sun____阅读 818评论 0 0
  • 浏览器支持 推荐使用Chrome以及Firefox浏览器 开局放图,忍不住吐槽一下----垃圾IE!!。 什么是P...
    我是一个粉刷酱阅读 3,385评论 0 1

友情链接更多精彩内容