Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点调试:监视表达式产生与exec console.log不同的结果_Javascript_Node.js_Debugging - Fatal编程技术网

Javascript 节点调试:监视表达式产生与exec console.log不同的结果

Javascript 节点调试:监视表达式产生与exec console.log不同的结果,javascript,node.js,debugging,Javascript,Node.js,Debugging,我正在实现我自己的承诺A+兼容包只是为了好玩。在测试过程中,出现了错误,而我现在很难解决它 我正试着用这个来测试它。导致问题的测试用例都是测试“如果/当y是一个表的一个表…”(已描述) 以下是第一次失败测试的说明: 承诺承诺/A+测试2.3.3:否则,如果x是一个对象或函数,2.3.3.3:如果那么是一个函数,用x调用它,作为此,第一个参数resolvePromise,第二个参数rejectPromise2.3.3.1:如果使用值y调用resolvePromise,则运行[[Resolve]](

我正在实现我自己的承诺A+兼容包只是为了好玩。在测试过程中,出现了错误,而我现在很难解决它

我正试着用这个来测试它。导致问题的测试用例都是测试“如果/当
y
是一个表的一个表…”(已描述)

以下是第一次失败测试的说明:

承诺承诺/A+测试2.3.3:否则,如果
x
是一个对象或函数,2.3.3.3:如果
那么
是一个函数,用
x
调用它,作为
,第一个参数
resolvePromise
,第二个参数
rejectPromise
2.3.3.1:如果使用值
y
调用
resolvePromise
,则运行
[[Resolve]](promise,y)
y
是一个表的表
y
是一个同步实现的自定义表的已实现承诺
,然后
通过从已实现承诺返回同步调用
resolvePromise

以下是我编写适配器的方式:

var adapter = (function() {
    var res, rej;
    return {
        defered: {
            promise: new Promise(function(resolve, reject){
                res = resolve;
                rej = reject;
            }),
            resolve: res,
            reject: rej,
        }
    }
})();

describe("Promises/A+ Tests", function () {
    require("promises-aplus-tests").mocha(adapter);
});
下面是全面实施的步骤。问题发生在以下部分:

Promise.prototype.then = function(onFulfill, onReject) {
    let p = new Promise();

    debugger;
    let pending = {
        fulfill: isFunction(onFulfill) ? onFulfill : v => v,
        reject: isFunction(onReject) ? onReject : e => { throw e },
        promise: p,
    };

    this.queue.push(pending);

    run.call(this);

    return p;
};
奇怪的事情开始了。其中一个测试试图评估,当一个承诺产生一个对一个承诺的承诺时,它将以相同的价值实现

我遇到了一些奇怪的错误,所以我一直试着调试它

发生了什么:当调试器到达上述代码中的断点时,
watch
的行为异常

如果我运行
watch('onFulfill')
观察者将给我:

0: onFulfill = undefined
但是如果我执行exec console.log(onFulfill)
,它将打印:

< [Function: onBasePromiseFulfilled]
在调试器控制台中,它为我提供:

< { state: State('pending'), queue: [] }

程序崩溃,给了我一个终止错误。

我试图重现这个错误,但是你的适配器看起来不像:
适配器中描述的那样。延迟的
应该是一个函数。修改适配器后,我使用节点检查器对其进行了调试

即使在修复了适配器之后,我也确实在mocha调试控制台中遇到了一些奇怪的行为,但这是我第一次使用node/mocha进行调试,所以我不知道它是否真的很奇怪。没有终止错误,但是尝试
console.log
一些明确定义的变量显示为未定义

此外,在不修改适配器的情况下,运行测试几乎立即失败,并显示一条清晰的错误消息。Se我们可能以不同的方式运行测试,或者如果您不明白的话,我们的设置会有所不同

以下是我使用的适配器:

var adapter = (function() {
    var res, rej;
    return {
        deferred: function() { 
            return {
                promise: new Promise(function(resolve, reject){
                    res = resolve;
                    rej = reject;
                }),
                resolve: res,
                reject: rej,
            };
        }
    }
})();

让我们知道是哪个测试导致了问题,这会很有帮助。我已经编辑了问题,解释了哪些问题。你能提供更多关于终止错误的信息吗?这就是问题所在!根本没有错误描述,它只是说执行已终止。我试图重现此错误,但您的适配器与自述文件中描述的不一样:adapter.deferred应该是一个函数。修改适配器后,我使用节点检查器对其进行了调试
> exec console.log(p)
var adapter = (function() {
    var res, rej;
    return {
        deferred: function() { 
            return {
                promise: new Promise(function(resolve, reject){
                    res = resolve;
                    rej = reject;
                }),
                resolve: res,
                reject: rej,
            };
        }
    }
})();