JS:在Promise中提取解析并没有得到相同的结果



我有以下代码块:

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调用的任何内容(。

然后,您可以将其他逻辑提取到一个单独的函数中。

相关内容

最新更新