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