承诺的轻量级实现

时间:2012-10-16 21:15:56

标签: javascript promise

我正在构建一个简单的图表工具。当用户选择数据源和图表类型时,将加载特定图表(.js)的数据和脚本,然后代码呈现图表。

目前我使用以下序列:

  1. 加载图表脚本
  2. 加载数据
  3. 渲染图表
  4. 为了提高性能,我想实现promises并并行加载脚本和数据。像jQuery这样的库对我的需求来说太大了(问题的关键不在于争论),是否有更轻量级的解决方案?也许一个1-2 kb的库,或者一个教程?同样,这是一个非常基本的实现,只有两个并行动作。

    [更新]我赞成所有回复,因为它们看起来都很棒。在我做了更多测试之后,我会报告回来。

7 个答案:

答案 0 :(得分:13)

我强烈建议使用Promises/A specification的实现,这正在成为在JavaScript中进行承诺的标准方式。当每个人都使用相同的风格时,Promise会更好地工作,因此使用兼容的实现符合每个人的利益。

Q可能是最受欢迎且功能最全的实现(它也将适应jQuery和其他不兼容的承诺),而whenrsvp应该更“轻量级”。

答案 1 :(得分:7)

因为这里有一个发展,所以想要投入我的2美分。 Promises have arrived natively in JavaScript并将针对FF 30和Chrome 33实施(根据this table)。

虽然在一个通常充斥着“但它是否支持IE6?”的地方几乎不值得一提,但是有一个2kb的缩小和gzip压缩填充here“基本上是rsvp.js的API重映射。 “

由于jQuery承诺aren't really promises,并且我同意this guy承诺语法在库之间不一致,我的观点是本机承诺已经值得实现,即使用户的浏览器可能不支持他们呢。


编辑:在Angular和Firefox addon-SDK的上下文中使用Promise后,两者都与Q非常相似,我更喜欢这种语法并且已经读过它仍然比本机实现更快。

答案 2 :(得分:4)

我建立了类似的东西,我称之为“当时”。我想要一些可以说“加载所有这些东西,然后在完成后做点什么”的东西。

https://github.com/geuis/when-then

我受到了承诺的启发,但想要一些简单的任务更简单。

答案 3 :(得分:3)

检查Deferred它是否具有模块化构建,您可以决定采用核心,并且不应超过1kb。

Browser install instructions解释了如何通过几个简单的步骤创建此类包

答案 4 :(得分:1)

如果你想要它非常轻量级,你应该尝试sb-promise,它在MIT许可下。它只有几kbs,并且与本机Promise API兼容。

function myFunction(){
   return new Promise(function(resolve,reject){
     resolve({some:"data"});
   }
}
myFunction().then(function(result){
   console.log(result); // {some:"data"}
});

答案 5 :(得分:0)

尝试async

它具有并行和串行操作的方法。它最初设计为在节点中运行,但现在也可以在浏览器中运行。

编辑添加:他们没有缩小版本,所以完整的辣酱玉米饼馅是〜42kb。

答案 6 :(得分:0)

我创建了一个非常轻量级的promise库。它不符合A标准,但我不想要2,000行长。

这是一个promisejs的分支,但我做了一些不错的补充。

这是回购的链接。 https://github.com/taylorhakes/promise-light