Dav*_*len 5 javascript promise
我为我的网络工作者设置了一个承诺/延迟,其中主线程对网络工作者的数据进行了更改并告诉我重新计算。我承诺完成后将其召回。
但是,在中间过程中,主线程可以进行额外的更改,再次承诺在完成后回调。(这个中断可能发生是因为 web worker 有时会调用 setTimeout 来允许中断。)此时 web worker 持有 2 个对主线程的 promise,它们都将返回完全相同的值。
可以扔掉第一个承诺,只回电第二个。代码将全部运行良好,主线程逻辑将非常好(实际上更好),只需一个回调。这样做有什么问题吗?
承诺只是一个存储在我保存在哈希表中的对象中的函数。所以如果我从哈希表中删除它,它的内存应该返回到堆中,所以应该没有任何泄漏。
那么我可以让我的回调系统成为骗子吗(在适当的时候)?
这是完全合法的。正如 Ben 在评论中指出的那样,在像自动完成这样的情况下它很常见。事实上,我写了一个明确设计的库来支持这种事情:
https://github.com/domenic/last
引用自述文件:
Run Code Online (Sandbox Code Playgroud)var last = require("last"); var smartSearch = last(doSearch); $(searchEl).on("input", function (ev) { smartSearch(searchEl.value).then(updateUIWithResults).done(); });被包装的函数将返回一个与原始函数返回的相同类型的承诺。并且一旦您再次调用包装函数,您将可以保证先前返回的挂起承诺永远处于挂起状态,因此您不必担心它们会晚于您的新承诺返回。
| 归档时间: |
|
| 查看次数: |
4468 次 |
| 最近记录: |