javascript – 为什么Promise构造函数需要执行程序?

使用 Promises时,为什么不能在代码库的其他地方定义解析和拒绝的触发器?

我不明白为什么解决和拒绝逻辑应该在声明promise的地方进行本地化.这是疏忽,还是强制执行者参数是否有好处?

我相信执行程序函数应该是可选的,并且它的存在应该确定promise是否封装了解决方案.如果没有这样的要求,承诺将更加可扩展,因为您不必立即启动异步.承诺也应该是可以重置的.它是1个开关,1或0,re​​solve()或reject().可以附加多种并行和顺序结果:promise.then(parallel1)和promise.then(parallel2)以及promise.then(seq1).then(seq2)但参考特权玩家无法解析/拒绝INTO开关

您可以在以后构建结果树,但不能改变它们,也不能改变根(输入触发器)

老实说,连续结果的树也应该是可编辑的.假设你想要拼出一个步骤并在你宣布许多承诺链之后做其他事情.重建承诺和每个顺序功能是没有意义的,特别是因为你甚至不能拒绝或毁掉承诺……

解决方法

这被称为Domenic创造的 the revealing constructor pattern.

基本上,这个想法是让你在对象尚未完全构建的同时访问对象的某些部分.引用Domenic:

I call this the revealing constructor pattern because the Promise constructor is revealing its internal capabilities,but only to the code that constructs the promise in question. The ability to resolve or reject the promise is only revealed to the constructing code,and is crucially not revealed to anyone using the promise. So if we hand off p to another consumer,say

过去

最初,promises使用延迟对象,这在JavaScript承诺的扭曲承诺中也是如此.在Angular的$q,Q,jQuery和旧版本的bluebird之类的旧实现中,这仍然是正确的(但经常被弃用).

API类似于:

var d = Deferred();
d.resolve(); 
d.reject();
d.promise; // the actual promise

它工作,但它有一个问题. Deferreds和promise构造函数通常用于将非承诺API转换为promise. JavaScript中存在一个名为Zalgo的“着名”问题 – 基本上,它意味着API必须是同步的或异步的,但不能同时进行.

事情是 – 延迟可以做以下事情:

function request(param) {
   var d = Deferred();
   var options = JSON.parse(param);
   d.ajax(function(err,value) { 
      if(err) d.reject(err);
      else d.resolve(value);
   });
}

这里有一个隐藏的微妙错误 – 如果param不是一个有效的JSON,这个函数会同步抛出,这意味着我必须在} catch(e){和.catch(e => catch)中包装每个promise返回函数所有的错误.

promise构造函数捕获此类异常并将其转换为拒绝,这意味着您永远不必担心同步异常与使用promises的异步异常. (它通过在下一个勾号中执行“然后回调”来保护你的另一面).

此外,它还需要一个额外的类型,每个开发人员必须了解promise构造函数不在哪里,这是非常好的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)