可能重复:
什么是递延,并承诺在未来的JavaScript之间的区别是什么?
最近我一直在做,以提高我的JavaScript应用程序质量的努力。
我采用的一种模式是使用一个单独的“数据上下文”对象加载数据,我的应用程序(以前我是直接在我看来机型做这个)。
下面的示例返回在客户端上被初始化数据:
var mockData = (function($, undefined) {
var fruit = [
"apple",
"orange",
"banana",
"pear"
];
var getFruit = function() {
return fruit;
};
return {
getFruit: getFruit
}
})(jQuery);
在大多数情况下,我们会从服务器加载数据,所以我们不能回到立即响应。 看来我对我们如何处理这个我们的API在两个选项:
- 使用回调
- 返回一个承诺 。
以前我一直用的回调方法:
var getFruit = function(onFruitReady) {
onFruitReady(fruit);
};
// ...
var FruitModel = function(dataContext, $) {
return {
render: function() {
dataContext.getFruit(function(fruit) {
// do something with fruit
});
}
};
};
不过,我可以看到它是如何可能的回调地狱结束,构建复杂的JavaScript应用程序时尤其如此。
然后,我遇到了承诺设计模式。 相反,需要调用者提供一个回调,我反而会返回一个可观察到一个“承诺”:
var getFruit = function() {
return $.Deferred().resolve(fruit).promise();
};
// ...
dataContext.getFruit().then(function(fruit) {
// do something with fruit
});
我可以看到使用这种模式的明显的好处,尤其是因为我可以wait
多个递延对象初始化加载数据,单页的应用程序时,这可能是非常有用的。
不过,我希望了解每个模式的利弊开始之前,我无论是在愤怒中使用。 我也有兴趣在这是否是其他图书馆中去的方向。这似乎是与jQuery的情况。
这里有一个链接到我使用的用于测试的小提琴。