美文网首页
JavaScript —— ES6 -- Promise

JavaScript —— ES6 -- Promise

作者: liaoyang | 来源:发表于2019-10-10 20:03 被阅读0次

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
})

相关文章

  • 【ECMAScript6】 Promise

    Promise 是什么 Promise 是 ES6 为 JavaScript 异步编程定义的全新 api 。为异步...

  • JavaScript 再学习:Promise的含义

    Promise 的含义 Promise 在 JavaScript 语言早有实现,ES6 将其写进了语言标准,统一了...

  • javaScript基础知识

    冴羽写博客 JavaScript深入系列ES6中promise如何实现 自我总结的JS javascript知识体...

  • Promise 对象

    一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...

  • Promise介绍及jQuery deferred详解

    Promise介绍 Promise 是 JavaScript 的异步操作解决方案,是ES6提出的异步操作解决方案之...

  • Javascript学习笔记-Promise

    1. Promise简介 Promise是ES6新引入的对象,是新增加的异步处理手段。在Javascript 中在...

  • JavaScript Promise的用法

    Promise是JavaScript ES6中的一个新特性,用于异步处理。在没有Promise之前,做异步调用通常...

  • ES6 Promise

    在学习Promise之前,可以看一下张鑫旭大神这一篇 ES6 JavaScript Promise的感性认知 ...

  • 来,用ES6写个Promise吧

    本文采用es6语法实现Promise基本的功能, 适合有javascript和es6基础的读者,如果没有,请阅读 ...

  • JavaScript —— ES6 -- Promise

    1.什么是Promise Promise是异步编程的一种解决方案。 Promise是一个对象,它代表了一个异步操作...

网友评论

      本文标题:JavaScript —— ES6 -- Promise

      本文链接:https://www.haomeiwen.com/subject/orvopctx.html