延期、promise 和future 之间有什么区别

推荐答案

鉴于我显然不喜欢我试图回答特工的问题.字面上的答案是,promise 是与其他对象共享的东西,而延期的promise 应该保密.首先,延期(通常是延长promise )可以自行解决,而promise 可能无法做到这一点.

如果你对细节感兴趣,那么判断Promises/A+.


据我所知,总体目标是通过标准化的接口提高清晰度并放松耦合.参见@jfriend00中的suggested reading:

而不是直接将回调传递给函数

就我个人而言,我发现在处理由异步请求填充的模板、加载具有依赖网络的脚本以及以非阻塞方式提供用户反馈以形成数据时,延迟尤其有用.

事实上,比较一下在JS模式下异步加载CodeMirror后执行某些操作的纯回调形式(抱歉,我没有在while中使用jQuery):

/* assume getScript has signature like: function (path, callback, context) 
   and listens to onload && onreadystatechange */
$(function () {
   getScript('path/to/CodeMirror', getJSMode);

   // onreadystate is not reliable for callback args.
   function getJSMode() {
       getScript('path/to/CodeMirror/mode/javascript/javascript.js', 
           ourAwesomeScript);
   };

   function ourAwesomeScript() {
       console.log("CodeMirror is awesome, but I'm too impatient.");
   };
});

对于promise 制定的版本(再次道歉,我在jQuery上不是最新的):

/* Assume getScript returns a promise object */
$(function () {
   $.when(
       getScript('path/to/CodeMirror'),
       getScript('path/to/CodeMirror/mode/javascript/javascript.js')
   ).then(function () {
       console.log("CodeMirror is awesome, but I'm too impatient.");
   });
});

我为这段半伪代码道歉,但我希望它能让核心思想更加清晰.基本上,通过返回标准化的promise ,您可以传递promise ,从而允许更清晰的分组.

Javascript相关问答推荐

模块与独立组件

单击子元素时关闭父元素(JS)

如何找出摆线表面上y与x相交的地方?

Rehype将hashtag呈现为URL

引用在HTMLAttributes<;HTMLDivElement>;中不可用

如何从html元素创建树 struct ?

实现JS代码更改CSS元素

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

使用Java脚本导入gltf场景并创建边界框

用JS从平面文件构建树形 struct 的JSON

更新动态数据中对象或数组中的所有值字符串

DOM不自动更新,尽管运行倒计时TS,JS

如何限制显示在分页中的可见页面的数量

TypeORM QueryBuilder限制联接到一条记录

调用特定数组索引时,为什么类型脚本不判断未定义

为什么这个最小Angular 的Licial.dev设置不起作用?

正则表达式以确定给定文本是否不只包含邮箱字符串

如何处理不带参数的redux thunk payloadCreator回调函数?

在对象的嵌套数组中添加两个属性

Google OAuth 2.0库和跨域开放程序的问题-策略错误