gpt4 book ai didi

javascript - 异步 JavaScript - 回调与延迟/ promise

转载 作者:IT王子 更新时间:2023-10-29 02:59:50 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
What are the differences between Deferred, Promise and Future in Javascript?

最近我一直在努力提高我的 JavaScript 应用程序的质量。

我采用的一种模式是使用单独的“数据上下文”对象为我的应用程序加载数据(以前我直接在我的 View 模型中这样做)。

以下示例返回在客户端初始化的数据:

var mockData = (function($, undefined) {

var fruit = [
"apple",
"orange",
"banana",
"pear"
];

var getFruit = function() {
return fruit;
};

return {
getFruit: getFruit
}
})(jQuery);

在大多数情况下,我们将从服务器加载数据,因此我们无法立即返回响应。对于如何在我们的 API 中处理这个问题,我似乎有两种选择:

  1. 使用回调
  2. 返回 promise .

以前我一直使用回调方法:

var getFruit = function(onFruitReady) {
onFruitReady(fruit);
};

// ...

var FruitModel = function(dataContext, $) {
return {
render: function() {
dataContext.getFruit(function(fruit) {
// do something with fruit
});
}
};
};

但是,我可以看到最终陷入回调 hell 的可能性,尤其是在构建复杂的 JavaScript 应用程序时。

然后我遇到了 Promises 设计模式。我没有要求调用者提供回调,而是返回一个可以观察到的“ promise ”:

var getFruit = function() {
return $.Deferred().resolve(fruit).promise();
};

// ...
dataContext.getFruit().then(function(fruit) {
// do something with fruit
});

我可以看到使用此模式的明显好处,特别是因为我可以等待多个延迟对象,这在为单页应用程序加载初始化数据时非常有用。

但是,在我开始愤怒地使用任何一种模式之前,我很想了解每种模式的优缺点。我也很想知道这是否是其他库的发展方向。jQuery 似乎就是这种情况。

这是一个 link到我用于测试的 fiddle 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com