首先,我创建一个空对象,无论何时单击按钮,该对象都应由某个数组更新。
您可以在步骤1和步骤2中看到这一点。
注意,我在这里使用了示例代码。 它不打算工作
步骤1:创建对象
var obj = {};
步骤2:创建按钮
Btn.addEventListener('click', () => {
const a = [..];
const b = [..];
const c = [..];}
obj['a'] = a;
obj['b'] = b;
obj['c'] = c;
);
用更新后的对象做某事
console.log(obj)
问题
我使用console.log()作为示例,当然我想用代码做一些其他的事情。
但是,console.log()是在EventListener之前执行的。 我明白为什么会这样,但我怎样才能改变这种行为呢?
我脑子里有一些东西,比如。then()的诺言技巧。
请注意,我不想在*addEventListener()**功能内这样做,而是在它之外!
首先,很明显,您不能将处理代码放在脚本的顶层,因为它会立即执行(而且只执行一次)。
所以您必须将处理放在一个函数中。 由于某种原因,您不希望click处理程序是该函数,请定义另一个函数:
var obj = {};
btn.addEventListener('click', () => {
obj.time = new Date;
process();
);
function process() {
console.log(obj);
}
您提到使用承诺和然后
。 但是then
也需要一个函数(作为它的参数)。 但是由于您已经有了一个回调函数(click处理程序),所以这并没有带来什么好处。
承诺不是真正合适的另一个原因:承诺不能解析多次,因此您提供给它的then
方法的回调永远不会执行多次。 要真正模拟多次点击的处理方式,你必须每次创建一个新的承诺,或者实现一个可观察的。 所有这些都只能使您走到这一步:最终您仍将处理一个回调函数。