我为我的网络工作者设置了一个承诺/延期设置,其中主线程对Web工作人员的数据进行了更改并告诉我重新计算。我承诺在完成后再回电。
然而,在中间过程中,主线程可以进行额外的更改,同时承诺在完成时回调。 (可能会发生此中断,因为Web工作者有时会调用setTimeout来允许中断。)此时,Web工作者将向主线程保留2个promise,这两个promise将返回完全相同的值。
可以扔掉第一个承诺,只回拨第二个承诺。代码将全部运行良好,主线程逻辑将很好(事实上更好)只有一个回调。这样做有什么问题吗?
promise只是存储在我在哈希表中保存的对象中的函数。因此,如果我从哈希表中删除它,它的内存应该返回到堆中,因此不应该有任何泄漏。
那么我可以让我的回调系统成为骗子(在适当的时候)吗?
答案 0 :(得分:3)
这是完全合法的。正如Ben在评论中指出的那样,在自动填充等情况下,它很常见。事实上,我写了一个明确设计的库来支持这种事情:
https://github.com/domenic/last
引用其自述文件:
var last = require("last"); var smartSearch = last(doSearch); $(searchEl).on("input", function (ev) { smartSearch(searchEl.value).then(updateUIWithResults).done(); });
包装函数将返回与此类型相同的承诺 由原件返回。一旦你调用包装函数 再次,您将保证以前返回的待处理 承诺永远保持待命,所以你不必担心它们 回来晚于你的新承诺。