未经处理的拒绝持有参考资料

时间:2016-12-01 20:22:48

标签: node.js

我在node.js中运行JavaScript时遇到了疑问。

var z = new Image();
function x()
{
    var promise = new Promise();
    return promise;
}
var promise = x();
promise.then(function(){});
..........
promise.reject(z);

x()返回的promise中没有添加拒绝处理程序。但是,在某些时候,如果我们发送具有响应值z的拒绝,则z是否将被垃圾收集,或者由于未处理的拒绝引用它而仍将保持。但是,当我向承诺添加catch / reject处理程序时,我看到z发生了垃圾收集。

请说明为什么Z没有发生垃圾收集,当传递给未处理的拒绝时。

1 个答案:

答案 0 :(得分:-1)

这不是你如何使用[原生A +]承诺。

试试这样:

function x()
{
    return new Promise((resolve,reject) => {
        if(success()) {
            resolve(success_val);
        } else {
            reject(new Error("fail!"));
        }
    });
}

let promise = x();
promise.then(function(){});

您无法拒绝其创建之外的承诺。您必须使用(resolve,reject)构造函数回调。