鉴于我显然不喜欢我试图回答特工的问题.字面上的答案是,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 ,从而允许更清晰的分组.