我有一个Promise
.我创建它以在需要时取消AJAX请求.但是因为我不需要取消那个AJAX,所以我从未解决它并且AJAX成功完成.
一个简化的片段:
var defer = $q.defer();
$http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) {
// do something
});
// Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request?
Run Code Online (Sandbox Code Playgroud)
永远不会解决这样的承诺导致内存泄漏?您对如何管理Promise
生命周期有什么建议吗?
我需要一个简单的 debounce 函数,立即数总是为真。
没有求助于 lodash 并在有人可以解释 Javascript 中的“去抖动”功能的帮助下,我实现了它如下,
function debounce(func, wait) {
var timeout;
return function() {
if (!timeout) func.apply(this, arguments);
clearTimeout(timeout);
timeout = setTimeout(()=>{timeout = null}, wait);
};
};
Run Code Online (Sandbox Code Playgroud)
它按预期工作,直到我需要去抖动 axios 请求。假设我有一个去抖动的 axios 方法,我希望调用方法像往常一样,这意味着我的去抖动 axios 方法应该返回我相信的承诺。
//the calling method should not change
debounced_axios().then(res => {...}).catch(err => {...})
Run Code Online (Sandbox Code Playgroud)
原始 debounce 实现的本质是在等待时间范围内只运行一次func ,但是我如何在等待时间范围内只返回一个承诺?
然后我想出了以下解决方案
all_timers = {}
function debounce_axios(input, wait) {
return new Promise((resolve, reject) => {
let timer = all_timers.[input] //check if it is …
Run Code Online (Sandbox Code Playgroud) 我在目前正在使用的代码库中注意到以下内容,我不确定它的含义是什么:
public spinnerPromise: Promise<void> = new Promise<void>(() => { return; });
是否有理由拥有空洞的承诺?这让我想起了一个
setTimeOut(fn, 0)
,我想知道它是否有类似的效果.
谢谢
promise ×3
javascript ×2
angularjs ×1
axios ×1
debouncing ×1
es6-promise ×1
memory-leaks ×1
typescript ×1