注意那些 Promise 反模式

JavaScript Promise 异步 回调函数 设计模式

JavaScript 作为天生的客户端脚本,编写异步逻辑有着天然的优势, 比如嵌套函数(很自然的闭包机制),事件模型(多数宿主都有提供),回调函数(函数是一等公民)。 Promise 用来更好地组织异步代码, 与其他设计模式类似,未能理解其设计意图之前容易误用和滥用。本文列举其中常见的反模式。

读者有更精彩的反模式例子,欢迎评论或者邮件。本文中的代码仅用于示例,未必存在这样的接口。

Promise 回调的执行

JavaScript Promise 异步

Promise 是 JavaScript 中处理异步的一种模式, 可以大幅简化异步代码和增加可读性,基于 Promise 的单元测试 也更加可读。 本文参考了 Promises/A+ECMA 2015 等文档, 测试了 Bluebird, Chrome 58.0.3029.110,Node.js 6.9.2 等环境,给出 Promise 异步行为。

TL; DR

  • Promise.prototype.then 传入的回调会在 NextTick(异步)执行
  • 构造 Promise 时传入的 executor 会立即执行
  • Promise 的各种实现表现一致

vimdiff 配置

Vim-Practice Git Tmux Vim Diff

vimdiff 命令相当于 vim -d a.txt b.txt,用来查看两个文件的 diff。 可以通过 :highlight 命令来进行 diff 配色,也可以将 vimdiff 设置到 Git 的 diff 工具。

百分号编码与 encodeURIComponent

encodeURIComponent UTF-8 URL GB2312

百分号编码、encodeURIComponent、URL encode 其实都是指在 URL 参数中转义任意字符。 在百分号编码中,每个字符被编码成3个字符,包括第一个起始的 %, 以及接着的两个字符表示 16 进制的一个字节。 比如空格字符(00100000)编码后的结果为 %20

TL;DR

  • URL 是 URI 的一种形式。
  • URI 的合法字符包括18个保留字符和66个非保留字符
  • application/x-www-form-urlencoded 中空格编码为 +
  • decodeURIComponent() 对非 UTF-8 的源会抛出 URIError: URI malformed

上一页 下一页