var defer = function () {
var pending = [], value;
return {
resolve: function (_value) {
value = _value;
for (var i = 0, ii = pending.length; i < ii; i++) {
var callback = pending[i];
callback(value);
}
pending = undefined;
},
then: function (callback) {
if (pending) {
pending.push(callback);
} else {
callback(value);
}
}
}
};
var oneOneSecondLater = function () {
var result = defer();
setTimeout(function () {
result.resolve(1);
}, 1000);
return result;
};
oneOneSecondLater().then(callback);
proposal-async-await
了解队列
专业名词注释
parse
: 解析defer
·: 递延对象the principle of least authority
: 最小权限原则我们可以在最小权限原则下进行编码。给予某人应许只能赋予观察该解决方案的权限,而给予某人一个解决者应仅赋予确定解 决方案的权限。一个不应隐含地给予另一个。时间的考验表明,任何多余的权限都将不可避免地被滥用,并且非常难以编辑。
duck-typing
: 鸭子类型q/design
来源: https://github.com/kriskowal/q/tree/master/design
相关知识
promise
考虑一种更通用的方法,在该方法中,函数返回一个代表函数最终结果的对象,而不是返回值或引发异常,该对象是成功的还是失败的。这个对象无论是形象上还是名字上都是最终解决的承诺。我们可以在promise上调用函数以观察其实现或拒绝。如果承诺被拒绝并且未明确遵守拒绝,则出于相同的原因,任何派生的承诺都会被隐式拒绝。
在设计的特定迭代中,我们将使用注册回调的“ then”函数将promise建模为对象。
这种设计有两个缺点:
更为通用的解决方案将接受任意数量的回调,并允许在超时之前或之后(通常是解决事件)之前或之后对其进行注册。我们通过使promise成为两个状态的对象来实现这一点。
最初未解决Promise,并且所有回调都添加到未决观察者数组中。兑现诺言后,将通知所有观察员。兑现承诺后,将立即调用新的回调。我们通过等待的回调数组是否仍然存在来区分状态变化,并在解决之后将它们丢弃。
这已经足够了,将其分解为实用程序功能将很有用。递延对象包括两个部分:一个部分用于
registering observers
注册观察者,另一部分用于notifying observers
通知观察者解决方案。(请参阅design / q0.js)duck typing