博客

  • 挑战自我

    半程马拉松两小时二十分 18 秒。继续努力加油(ง•̀_•́)ง

  • 什么最重要

    疫情三年,家里也发生了好多变化,尤其是今年,医院进进出出,见过了更多悲欢离合。
    什么最重要,对我来说肯定不是某个项目某个发明,现在那些成败其实无足轻重。再看某些人耿耿于怀或者执着的事情,也会感觉好笑不过如此。
    年底了,希望明年有些向好的变化吧,祝福自己。

  • 技术周报Aug18

    #top 数字技术让没有银行账户的人拥有了账户 | 盖茨笔记

    “我对今年Findex报告中记录的巨大进步感到兴奋。世界各地拥有和使用银行账户的人比以往任何时候都要多,其中包括更多的女性和低收入人群。尽管很多人仍然被排除在外,但我们有了一个可行的路线图,并且不需要额外投入数十亿美元的资金来建立为他们提供服务的系统。遵循该路线图图,我们可以帮助他们摆脱贫困,让世界变得更公平。”

    #AI 一些Disco Diffusion的资料,来自和菜头

    #特斯拉 当公司来了特斯拉人

    这位曾在特斯拉多年的新同事不仅在入职第一天便摸清了公司的组织架构、制度与流程,而且在迅速进入工作状态后,表现出强大的控场能力,“她在找到项目对接人之后便马上开始把控流程”。

    随着时间的推进,Elsa还凭借一己之力逐渐影响团队原本软绵绵的氛围。具体表现是,在给领导或同事发邮件时,直切正题,不会加任何多余的话;原本冗长看似花哨的PPT也被“内卷”为轻易不超过10页;开会遇到更重要的工作,则会直接退出会议。

    #Lottie Lottie动画gallery

    #安卓 Jetpack Compose 到底优秀在哪里?| 开发者说·DTalk

    #diagram 我以前推荐过这个网站,重新refresh一下,每次我画架构图都上这里找形状相似的然后改吧改吧 https://real-world-plantuml.com/

    #架构 秒杀系统如何设计?

    如何自然地演讲ppt,而不是念ppt?

    #设计 太注重用户体验,反而会丧失个性吗?

    #阿里 阿里换个活法

  • JS Promise迷思- 比较return Promise.resolve(val) 和return val

    最近碰到这样一个问题,JavaScript可以通过Promise.resolve()来转化一个值或者thenable对象成为一个Promise。

    Promise可以通过then串联起来(chain),then的函数中,可以直接return val,也可以return Promise.resolve(val),那么这两种方式有什么区别么?

    我听到的回答是没什么不同,但是我理解不深,所以打算自己研究一下。构造以下代码例子,猜猜运行结果是什么呢?

    Promise.resolve(1)
        .then(v => Promise.resolve(v + 1))
        .then(v => Promise.resolve(v + 3))
        .then(v => console.log(`First: ${v}`));
    Promise.resolve(1)
        .then(v => v + 1)
        .then(v => Promise.resolve(v + 5))
        .then(v => console.log(`Second: ${v}`));
    Promise.resolve(1)
        .then(v => v + 1)
        .then(v => v + 7)
        .then(v => console.log(`Third: ${v}`));

    根据我对并发asynchronous的理解,如果这两种形式一样的话,结果有可能是顺序的First,Second,Third。也有可能是乱序的,First Second Third顺序不一定,在浏览器运行有可能因为某种原因,一直出现同样的结果,所以我们分别试试Chrome和Safari的操作台。但是结果很一致,哪怕在本地node直接跑nodejs也是一样。

    结论是什么呢?return Promise.resolve(val)和return val这两种方式在结果上是一样的,对于不关注运行顺序的代码来说效果也是一样的。但对于开发人员来说,需要知道这两种方式的运行时间点是不同的,这个不同在某些复杂情况下需要考虑到。简单的说,如果不是故意要延迟结果的产生返回,return val这种方式既简单又快捷,用它就好了。

    BTW。

    参考这篇SO回答https://stackoverflow.com/questions/58217603/what-is-the-difference-between-returned-promise 以及这一篇https://dev.to/deepal/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-2f57 可以知道Promise.resolve是一种微任务。

    我大概能理解开发人员对于这些名词的怨念,微任务(microtask)又是什么?参考MDN这篇文章https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide 大概就是如下图所示。一个task完成以后,开始查询微任务队列microtask queue然后运行,接着运行下一个任务或者开始render。

    这些内容有些高阶了,但对于JavaScript框架作者来说是必须的,想写框架的,可以参考这一篇https://blog.risingstack.com/writing-a-javascript-framework-execution-timing-beyond-settimeout/