我正在使用 Promise 异步连接到 API。 API 发出两个事件:connected
和 socketConnected
。
根据我的 connect()
函数,我想等待这两个事件触发。
connect() {
return new Promise((resolve,reject)=>{
this._client.on('connected', resolve);
this._client.on('socketConnected', resolve);
setTimeout(reject, 5000);
}
}
但是,您只能解析一次,并且我希望在 promise 解析之前触发这两个事件。我该如何设置才能使其表现出这种方式?
最佳答案
您需要使用 Promise.all
创建两个 个 Promise,每个事件一个,并且当两者都解析时 - 当 Promise.all
解析时 - 您可以解析 connect
返回的 Promise:
connect() {
return new Promise((resolveAll, rejectAll) => {
Promise.all([
new Promise(res1 => this._client.on('connected', res1)),
new Promise(res2 => this._client.on('socketConnected', res2))
]).then(resolveAll);
setTimeout(rejectAll, 5000);
});
}
如果您希望垃圾收集尽快发生,您还可以在 Promise.all
解析时清除超时:
connect() {
return new Promise((resolveAll, rejectAll) => {
const rejectTimeout = setTimeout(rejectAll, 5000);
Promise.all([
new Promise(res1 => this._client.on('connected', res1)),
new Promise(res2 => this._client.on('socketConnected', res2))
]).then(() => {
clearTimeout(rejectTimeout);
resolveAll();
});
});
}
关于javascript - Promise - 在多个事件后解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067701/