gpt4 book ai didi

javascript - 回流 Action 全局调试

转载 作者:行者123 更新时间:2023-12-03 07:19:24 26 4
gpt4 key购买 nike

有没有办法全局 console.log() Reflux 中所有触发的 Action ?理想情况下同时打印它们的参数。

最佳答案

正如 Cory Danielson 所说,Reflux 使用 EventEmitter。您可以像这样插入自己的 EventEmitter 实现:

Reflux.setEventEmitter(require('events').EventEmitter);

所以你想在那里注入(inject)一个启用了调试的 EventEmitter 构造函数,就像这样:

var EventEmitter = require('events').EventEmitter;

function DebugEventEmitter() {
var realEmitter = new EventEmitter();

var origEmit = realEmitter.emit;
realEmitter.emit = function () {
console.log('emitting', arguments);
return origEmit.apply(realEmitter, arguments);
};

return realEmitter;
}

Reflux.setEventEmitter(DebugEventEmitter);

这只会劫持用于发出事件的 emit 方法,但您当然可以劫持 EventEmitter 上的任何其他方法并添加日志记录。

编辑

由于 Reflux 没有将 Action 名称传递给发出的事件,这里有另一种更 hackish 的解决方案,但它应该可以用于调试目的。

var Reflux = require('reflux');

// Do this before any code is calling Reflux
var origCreateAction = Reflux.createAction;
Reflux.createAction = function () {
var action = origCreateAction.apply(Reflux, arguments);

var wrapper = function () {
console.log(action.actionName, 'called with args: ', arguments);
return action.apply(action, arguments);
};

for (var key in action) {
wrapper[key] = action[key];
}

return wrapper;
};

// Example using actions and triggering them, which logs
// with our wrapper
var Actions = Reflux.createActions([
'statusUpdate',
'statusEdited',
'statusAdded'
]);

Actions.statusUpdate.listen(function () {
console.log('status update called');
});

Actions.statusUpdate({test: 1});

关于javascript - 回流 Action 全局调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com