相关疑难解决方法(0)

永远不会解决的承诺导致内存泄漏?

我有一个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生命周期有什么建议吗?

javascript memory-leaks promise angularjs angular-promise

85
推荐指数
1
解决办法
2万
查看次数

我对 debounce axios 请求的实现使承诺永远处于挂起状态,有没有更好的方法?

我需要一个简单的 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)

javascript promise debouncing es6-promise axios

7
推荐指数
1
解决办法
7541
查看次数

承诺只是回归?

我在目前正在使用的代码库中注意到以下内容,我不确定它的含义是什么:

public spinnerPromise: Promise<void> = new Promise<void>(() => { return; });

是否有理由拥有空洞的承诺?这让我想起了一个 setTimeOut(fn, 0),我想知道它是否有类似的效果.

谢谢

promise typescript

5
推荐指数
1
解决办法
442
查看次数