【发布时间】:2018-12-20 00:54:42
【问题描述】:
我正在尝试使用 Promise 制作游戏,并且仅在鼠标单击(向下和向上)时调用它们,将游戏状态从第一个 Promise (A) 传递到最后一个 Promise (C),并对其进行更新。如果 Promise B 正确执行,则 Promise C 根本不会执行。是否可以链接多个 Promise 并仅在事件触发时执行它们?
class A {
static draw() {
return new Promise((resolve) => {
const state = {name: 'Alex'};
resolve(state);
})
}
}
class B {
static draw(state) {
const div = document.querySelector('.app');
div.addEventListener('mousedown', () => {
return new Promise((resolve) => {
state.lastname = 'Johnson';
console.log('state with ln ' + state)
resolve(state);
})
})
}
}
class C {
static draw(state) {
const div = document.querySelector('.app');
div.addEventListener('mouseup', () => {
return new Promise((resolve) => {
state.age = '23';
console.log('state with age ' + state)
resolve(state);
})
})
}
}
A.draw()
.then(res => {
B.draw(res)
.then(res => C.draw(res))
})
【问题讨论】:
-
你研究了什么?这不是一个新问题,并且有大量资源可以帮助您“链式承诺”:google.com/search?q=javascript+chain+promises
-
请注意,您在
addEventListeners中的承诺将从您的外部draw函数返回。 -
真的怀疑在这里使用 Promise 是一种实用的方法。
-
@charlietfl 我同意 - 它们不是为重复事件而设计的,它们只适用于一次性事件。
标签: javascript