【发布时间】:2017-05-25 13:45:09
【问题描述】:
在 ECMAScript 中,我使用的是 CancelablePromise (https://github.com/alkemics/CancelablePromise),它基本上只是一个带有 .cancel() 函数的 Promise。无论何时调用.cancel(),都不会执行提供给.then() 和.catch() 的回调。
我想知道如果我等待一个被取消的承诺会发生什么:
CancelablePromise promise = new CancelablePromise((resolve, reject) => resolve(1));
const promise2 = promise.then(x => x + 1);
promise.cancel();
console.log(await promise2);
所以这段代码按预期工作,控制台上没有打印任何内容。但是,我想知道这是否会创建任何无法被 GC 收集的挂起线程/引用,或者这是否完全安全有效地使用?
【问题讨论】:
-
我想会有一些引用表明 GC 不能
collect因为 GC 不会“知道”什么是可取消的 Promise - 抱歉我只能推测,也许有人知道每个 javascript 引擎的内部都可能会偶然发现这个问题并能够给出明确的答案:p -
不要使用那个库。它的实施很糟糕。
-
@Bergi,你能说得更具体点吗?
-
关于实施?我宁愿不。但是是的,that library 在某些情况下确实会泄漏内存。
标签: javascript ecmascript-6 async-await