gpt4 book ai didi

javascript - 如何在 JavaScript 中实现由时钟解析的 monad Promise?

转载 作者:行者123 更新时间:2023-11-28 02:29:49 25 4
gpt4 key购买 nike

观看时Douglas Crokfrod's talk on monads and promises我对 52:40 提出的问题感兴趣。如何使用 Monad 实现看门狗定时器,以便在调用失败函数之前,可以保留 promise 或仅在可定义的时间长度内处于挂起状态。这种模式有一个普遍接受的名称吗?

最佳答案

事实并非如此,杰森。查看 GitHub 上的 Crockford 实现,它没有适合该行为的 Hook 。

也就是说,在典型的 Promise 范例中,有比 Crockford 代码授予的更多选项。

查看 AJAX 库。尽管很多人不知道,很多 AJAX 库(包括 jQuery)都会返回 Promise。

要在他的代码中执行此操作,您可以 Hook 一个具有计时器的子句,该计时器.break是 promise ,基于随 promise 参数提交的时间。

否则,你可以这样做:

var vow = VOW.make(),

last_promise = vow.when()
.when()
.when()
.when() /*...*/;


(function () {
var vow = VOW.make(),
time_over = false,
time_limit = 30 * 1000,
timer_handle,

success = function (value) {
if (time_over) { vow["break"]("Time's up!"); }
else {
clearInterval(timer_handle);
vow.keep(value);
}
};

trailing_promise.when(success, /* fail */);

return vow.promise;

}()).when(/* ... */)
.when()
.when();

我认为类似的东西应该与那里给出的内容一起工作。

就我个人而言,在看完演讲并阅读他的实现之后,我认为我更喜欢 promise 保留其线性队列函数(donefailsuccess/失败ready/fail或其他),但我见过的大多数库都会创建时间队列(whennext 等)与 promise 分开。

所以这里确实有两个相互竞争的队列。一种是您订阅事件(如 .addEventListener:当操作发生时,所有监听器同时被调用),另一种是您订阅下一个结果的最终返回(就像监听订阅事件监听器的内容)。

在 Crockford 的最小实现中,更像是只能有一个监听器,然后订阅者监听前一个订阅者的最后一个订阅者...

...链接多个指令在同一队列中发生的唯一方法是缓存返回:

var level_0 = VOW.make(),
level_1 = level_0.when(/* ... , ... */),
level_2 = level_1.when(/* ... , ... */);


level_1.when(/* more stuff */);
level_1.when(/* even more */);


level_2.when()
.when()
.when();


// ...eventually.......

level_0.keep("stuff");

关于javascript - 如何在 JavaScript 中实现由时钟解析的 monad Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405549/

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