我有以下代码块:
async done() => {
return new Promise((resolve, reject) => {
const events = new Map();
events.set('CLOSE_CLICK_EVENT', () => {
//other logic
resolve(false);
});
}
}
我正试图删除";其他逻辑";外部功能。我的另一种方法如下:
修改后的方法:
async done() => {
return new Promise((resolve, reject) => {
const events = new Map();
events.set('CLOSE_CLICK_EVENT', () => {
return this._doneCloseButtonHandler(events);
});
}
}
async _doneCloseButtonHandler(events) {
//other logic
return false;
}
然而,第二种方法似乎表现不一样——为什么承诺的解决方式不同?当我尝试使用第二种方法时,承诺似乎没有得到解决。
在第二种方法中,您从未调用resolve
函数,因此它无法解析,您需要将其链接:
return this._doneCloseButtonHandler(events).then(resolve, reject);
编辑:根据OP的请求,当您将resolve
作为参数传递时,还有一种方法可以在_doneCloseButtonHandler
函数中解决:
return this._doneCloseButtonHandler(events, resolve)
// ...
function _doneCloseButtonHandler(event, resolve) {
// ....
resolve()
}
提取;其他逻辑";,您应该首先将函数重构为
async done() {
const _ = await new Promise((resolve, reject) => {
const events = new Map();
events.set('CLOSE_CLICK_EVENT', resolve);
// do something with `events`
});
// other logic that should happen when the CLOSE_CLICK event occurs
return false;
}
(_
对应于将传递给resolve
调用的任何内容(。
然后,您可以将其他逻辑提取到一个单独的函数中。