【发布时间】:2016-10-05 17:28:06
【问题描述】:
使用Promises 时,为什么不能在代码库的其他地方定义resolve 和reject 的触发器?
我不明白为什么 resolve 和 reject 逻辑应该在声明承诺的地方进行本地化。这是疏忽,还是强制使用 executor 参数有什么好处?
我认为 executor 函数应该是可选的,它的存在应该决定 Promise 是否封装了解析。如果没有这样的要求,promise 的可扩展性会更高,因为您不必立即启动 async。承诺也应该是可重置的。这是一个 1 次开关,1 或 0,resolve() 或 reject()。可以附加许多并行和连续的结果:promise.then(parallel1) 和 promise.then(parallel2) 以及 promise.then(seq1).then(seq2) 但参考特权玩家无法解决/拒绝进入开关
您可以稍后构建结果树,但不能更改它们,也不能更改根(输入触发器)
老实说,顺序结果树也应该是可编辑的。假设您想拼接出一个步骤并做其他事情,在您声明了许多承诺链之后。重构 Promise 和每个顺序函数是没有意义的,尤其是因为你甚至不能拒绝或破坏 Promise...
【问题讨论】:
-
这就是语法的设计方式..
-
旁注:不确定我是否会使用此 API 客户端,因为并非所有浏览器都支持它。
-
解决或拒绝承诺的能力是一项特权功能,默认情况下,仅对创建承诺的代码可用。执行人就是这样设置的。如果执行器想要在闭包之外分配解析或拒绝处理程序,它可以这样做以使其他代码能够调用它。但是,默认情况下,它对 executor 是私有的,并且是故意这样做的。
-
我看到有人说这是设计使然,但我不明白为什么要这样设计,这有什么好处?
标签: javascript asynchronous promise w3c