Promise 与 Future 的异同比较

· 约 6 分钟读完

在前端开发中,Promise 和 Future 都是处理异步编程的重要技术手段。它们的基本思想很相似,但其细节和实现方式却有很大的差别。本文将比较 Promise 和 Future 的异同,并为读者提供学习和指导意义。

Promise 和 Future 的定义

Promise 和 Future 都是处理异步编程的技术手段,目的是为了避免回调地狱(Callback Hell),让异步调用更加优雅和简便。具体地说,

  1. Promise :是 ES6 语法中的概念;可以将它理解为一个代表了异步操作的对象,提供了一种统一的方法来处理异步操作返回值的成功和失败情况。

  2. Future :是函数式编程 FLuture 库中的概念;可以将它理解为一个封装了异步操作的函数,通过链式调用来显式地控制状态的变化。

虽然它们的定义略有不同,但都是用来处理异步编程的情况,快捷且统一的处理回调函数解决了前端异步编程的难点。

Promise 和 Future 的实现方式

Promise 和 Future 的内在实现方式却有所不同。

  1. Promise :主要是采用了状态转移机的方式来实现异步操作,有以下三种状态:

    • Pending(进行中)
    • Fulfilled(已成功)
    • Rejected(已失败)

每个状态都是单向转换的,可以通过 then 方法和 catch 方法,依据 Promise 代码的(Promise A+规范,规范文档地址:https://promisesaplus.com/)操作,决定 Promise 对象如何转换。

Promise的常用方法:

方法 描述
then 在异步完成后调用,Promise成功则调用onFulfilled,失败则调用onRejected
catch 当 Promise 状态为 rejected 时才会调用
  1. Future :主要是选择将异步结果包装成一个容器,通过链式调用显式地控制状态的变化,从而主动控制异步操作的执行顺序,其图示如下所示:

学习意义

本文介绍了 Promise 和 Future 的异同比较,发现使用 Future 的代码具有更好的可读性和可维护性,能够避免回调地狱,并且更加灵活。同时,强烈建议读者评估一下自己所使用的异步框架是否真的符合设计的良好结构。最后,读者应当根据具体情况在代码中合理地应用 Future 的方法,优化异步调用的效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ca47a8e46428fe9e240a41