资讯专栏INFORMATION COLUMN

我不得不知道的promise知识点

crelaber / 3080人阅读

摘要:值得注意的一点是,不仅仅可以传一个进去,他还可以传对象和对象。方法返回一个以给定值解析后的对象。

文章背景:前几天在读给某个同事提了一个很蠢的问题,然后被吐槽api不熟悉,于是决定写一篇文章整理一下在开发&学习过程中promise一些需要了解的特性.

我当时的问题

我当时没看懂什么意思,后来理解了这段话要表达的是,如果直接在一个不知道是否返回标准promsie的值上面直接调用then ,可能会产生报错。

正题
1promise的控制反转
例子:
定义一个把promise的回调暴露出来的方法

module.exports = function createExposedPromise () {
  let resolve, reject
  const promise = new Promise((rs, rj) => {
    resolve = rs
    reject = rj
  })
  return {
    promise,
    executor: {
      resolve,
      reject
    }
  }
}

使用

  const AEMonitorServer = createScriptMonitor(
    AE_SCRIPT_MONITOR_DEFUALTS.host,
    AE_SCRIPT_MONITOR_DEFUALTS.port,
    data => handleMonitorMessage(data, statusPromiseMap, quickLogger),
    error => handleMonitorError(error, AEMonitorErrorPromise.executor.reject)
  )

当我们promise的状态依赖于另外一个异步事件,但是另外一个异步事件是cb形式的,为了和我们外部的promise建立联系,我们就使用promise的控制反转的功能实现.把promise的reject和resolve暴露出来,就可以在cb里面改变promise的状态了。

2
promise.resolve
值得注意的一点是,resolve不仅仅可以传一个value进去 ,他还可以传 promsie对象和thnable对象。

mdn 
https://developer.mozilla.org...
Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);如果传入的value本身就是promise对象,则该对象作为Promise.resolve方法的返回值返回;否则以该值为成功状态返回promise对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109646.html

相关文章

  • 前端基础进阶(十三):透彻掌握Promise使用,读这篇就够了

    摘要:在对象的构造函数中,将一个函数作为第一个参数。二对象中的方法,可以接收构造函数中处理的状态变化,并分别对应执行。 showImg(https://segmentfault.com/img/remote/1460000008932857); Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻。这篇文章的开头,主要跟大家分析一下,为什么会有Promise...

    yy736044583 评论0 收藏0
  • ES6-7

    摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...

    mudiyouyou 评论0 收藏0
  • [译] 深入理解 Promise 五部曲:5. LEGO

    摘要:一个就像一个乐高玩具。问题是不是你小时候玩儿的那个有趣,它们不是充满想象力的打气筒,也不是一种乐高玩具。这是对的并不是给开发者使用的,它们是给库作者使用的。不会超过这两种情况。第二个是根据第一个处理函数如何运行来自动变成状态成功或者失败。 原文地址:http://blog.getify.com/promis... 在 Part4:扩展问题 中,我讨论了如何扩展和抽象Promise是多么...

    LiveVideoStack 评论0 收藏0
  • JavaScript 运行机制详解(理解同步、异步和事件循环)

    摘要:从异步过程的角度看,函数就是异步过程的发起函数,事件监听函数就是异步过程的回调函数。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。 1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScrip...

    loonggg 评论0 收藏0
  • ES6,你得不学!

    摘要:但是,的本质仍然是函数,是构造函数的另外一种写法。报错原生构造函数的继承对于一些原生的构造函数,比如,,,等,在是无法通过方法实现原生函数的内部属性,原生函数内部的无法绑定,内部属性获得不了。 在没有学习 ES6 之前,学习 React,真的是一件非常痛苦的事情。即使之前你对 ES5 有着很好的基础,包括闭包、函数、原型链和继承,但是 React 中已经普遍使用 ES6 的语法,包括 ...

    CKJOKER 评论0 收藏0

发表评论

0条评论

crelaber

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<