我在洗澡的时候想到了一些事情。
deferred / promise 模式是通过允许开发人员链接调用函数来减少回调地狱,如下所述:
Parse.User.logIn("user", "pass").then(function(user) {
return query.find();
}).then(function(results) {
return results[0].save({ key: value });
}).then(function(result) {
// the object was saved.
});
从我的头顶上 - 如果我错了请纠正我 - 但似乎使用 deferred / promises 是打破 Demeter 法则的简单方法?
得墨忒耳法则规定:
对象的方法只能调用以下方法:
- 对象本身。
- 方法的参数。
- 在方法中创建的任何对象。
- 对象的任何直接属性/字段。
每个单元应该只对其他单元有有限的了解:只有与当前单元“密切”相关的单元。或者:每个单位应该只和它的朋友交谈;不要和陌生人说话。
对此有何评论?
2013 年 12 月 1 日更新:
我的问题的摘要版本。Promise 框架旨在简化异步编码并避免“回调地狱”。Promise 最有益的功能之一是您可以使用 链式调用事件.then()
,如我上面的示例所示。
鉴于所有代码/函数现在都在使用 Promise(就像 Benjamin Gruenbaum(下面的作者)目前正在做的那样),它不会打开它以通过 go.then().then().then()
等方式使链调用函数变得非常容易吗?
编写一个接一个调用函数的代码(.then().then().then()
)必须是如何打破得墨忒耳定律的教科书示例。
因此我的问题;Promise 框架是否促进/开放/使其更容易滥用/违反 Demeter 法则?