我正在寻找以并行方式运行两个 AJAX 调用的移植 JS 代码,但在操作之前都需要完成这两个调用。使用 JQuery,您可以:
$.when($.getJSON('/configVal'),
$.getJSON('/configdesc'))
.then(function(configByPluginResponse, configSpecResponse) {
现在我不确定如何处理 Fay。haskell 的多线程部分不可用。我真的不想要一个状态单子,因为我希望两个提取并行运行,而不是顺序运行。
我在 Fay 的源代码中发现了这个例子,Cont.hs。我不确定它是否能真正解决问题,但无论如何如果我只运行“fay Cont.hs”它就不会编译;它抱怨不知道 GHC.Base.Monad。这是 Fay 的现任 GIT 负责人。
编辑:如果可能的话,我想取悦 Haskell 语义,如果不是......那么是的,包装 jquery 的“then”。我不确定如何使用 Fay 实现延续或 FRP,我们将不胜感激(对于 FRP ,Fay 是否足够表达是值得怀疑的)。因此,作为第二种选择,我只包装“then”,但如果可能的话,我真的希望它像 JS 那样接受任意数量的并发 ajax 请求(可能通过数组),这可能很难实现。我会自己试一试,但我想我不会成功。
我在 fay-jquery 绑定中看到了这条评论:
-- TODO: jQuery['when'](): figure out Deferred first
我确实设法编译了 Cont.hs,我不得不使用 --no-ghc 标志。所以我会检查一下,虽然标志禁用了类型检查,但对此并不疯狂。
当我确信 Haskell 作为一种语言能够更好地解决此类问题时,不得不依赖 JS 库来进行此类操作是令人沮丧的。
EDIT2:所以看来我想要的是协程。我已经看到一些Haste代码在做相关的事情,但并没有完全做到这一点。我也会接受 Haste 或 GHCJS 解决这个问题。
EDIT3:在正常情况下,Haskell 似乎这样做了;我想它可以与 GHCJS 和 Haste 一起使用,但在 Fay 中,我猜它可能必须是 JS 的包装......