提问者:小点点

JavaScript:在事件发生后引入顺序强制执行代码


首先,我创建一个空对象,无论何时单击按钮,该对象都应由某个数组更新。

您可以在步骤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()**功能内这样做,而是在它之外!


共1个答案

匿名用户

首先,很明显,您不能将处理代码放在脚本的顶层,因为它会立即执行(而且只执行一次)。

所以您必须将处理放在一个函数中。 由于某种原因,您不希望click处理程序是该函数,请定义另一个函数:

var obj = {};

btn.addEventListener('click', () => {
    obj.time = new Date;
    process();
);

function process() {
    console.log(obj);
}

您提到使用承诺和然后。 但是then也需要一个函数(作为它的参数)。 但是由于您已经有了一个回调函数(click处理程序),所以这并没有带来什么好处。

承诺不是真正合适的另一个原因:承诺不能解析多次,因此您提供给它的then方法的回调永远不会执行多次。 要真正模拟多次点击的处理方式,你必须每次创建一个新的承诺,或者实现一个可观察的。 所有这些都只能使您走到这一步:最终您仍将处理一个回调函数。