Typescript 在回调中解析承诺
我的客户端websocket提供了为某些事件注册回调的方法,例如当连接打开或关闭时。在这些回调中,我想解决一个承诺,这样我就可以等待外部事件的发生。我在单元测试中使用它。我想要这样的东西:Typescript 在回调中解析承诺,typescript,promise,async-await,Typescript,Promise,Async Await,我的客户端websocket提供了为某些事件注册回调的方法,例如当连接打开或关闭时。在这些回调中,我想解决一个承诺,这样我就可以等待外部事件的发生。我在单元测试中使用它。我想要这样的东西: let wsOnOpenPromise = new Promise<void>(resolve => { /* ??? */ }); let wsOnClosePromise = new Promise<void>(resolve => { /* ??? */ }); co
let wsOnOpenPromise = new Promise<void>(resolve => { /* ??? */ });
let wsOnClosePromise = new Promise<void>(resolve => { /* ??? */ });
const ws = new WebsocketBuilder(url)
.onOpen((i, e) => { /* resolve wsOnOpenPromise here */ })
.onClose((i, e) => { /* resolve wsOnClosePromise here */ })
.build();
await wsOnOpenPromise;
shutdownServer(); /* Shutdown the server here, the on-close event should fire */
await wsOnClosePromise;
let onOpen = () => {};
let onClose = () => {};
const wsOnOpenPromise = new Promise<void>(resolve => onOpen = resolve);
const wsOnClosePromise = new Promise<void>(resolve => onClose = resolve);
const ws = new WebsocketBuilder(url)
.onOpen((i, e) => { onOpen() })
.onClose((i, e) => { onClose() })
.build();
await wsOnOpenPromise;
/* Shutdown the server here, the on-close event should fire */
await wsOnClosePromise;
让wsOnOpenPromise=newpromise(resolve=>{/*???*/});
让wsOnClosePromise=newpromise(resolve=>{/*???*/});
const ws=新WebsocketBuilder(url)
.onOpen((i,e)=>{/*在此处解析wsOnOpenPromise*/})
.onClose((i,e)=>{/*在此处解析wsOnClosePromise*/})
.build();
等待我们的承诺;
shutdownServer();/*在此关闭服务器,应触发on close事件*/
等待承诺;
我该怎么做?似乎我需要先定义承诺,然后在回调中解决它们,以便以后可以像代码中所示那样等待它们。我让它这样工作:
let wsOnOpenPromise = new Promise<void>(resolve => { /* ??? */ });
let wsOnClosePromise = new Promise<void>(resolve => { /* ??? */ });
const ws = new WebsocketBuilder(url)
.onOpen((i, e) => { /* resolve wsOnOpenPromise here */ })
.onClose((i, e) => { /* resolve wsOnClosePromise here */ })
.build();
await wsOnOpenPromise;
shutdownServer(); /* Shutdown the server here, the on-close event should fire */
await wsOnClosePromise;
let onOpen = () => {};
let onClose = () => {};
const wsOnOpenPromise = new Promise<void>(resolve => onOpen = resolve);
const wsOnClosePromise = new Promise<void>(resolve => onClose = resolve);
const ws = new WebsocketBuilder(url)
.onOpen((i, e) => { onOpen() })
.onClose((i, e) => { onClose() })
.build();
await wsOnOpenPromise;
/* Shutdown the server here, the on-close event should fire */
await wsOnClosePromise;
让onOpen=()=>{};
让onClose=()=>{};
const wsOnOpenPromise=新承诺(resolve=>onOpen=resolve);
const wsOnClosePromise=新承诺(resolve=>onClose=resolve);
const ws=新WebsocketBuilder(url)
.onOpen((i,e)=>{onOpen()})
.onClose((i,e)=>{onClose()})
.build();
等待我们的承诺;
/*在此关闭服务器,应触发on close事件*/
等待承诺;
这应该可以做到:
const ws = new WebsocketBuilder(url);
const onOpen = new Promise(ws.onOpen.bind(ws));
const onClose = new Promise(ws.onClose.bind(ws));
ws.build();
await onOpen;
shutdownServer(); /* Shutdown the server here, the on-close event should fire */
await onClose;
说明:
下面的表达:
new Promise(ws.onOpen.bind(ws))
…非常类似于:
new Promise((resolve, reject) => ws.onOpen(resolve, reject))
由于onOpen只接受一个参数,reject
实际上不起作用。这可以进一步扩展为等效的:
new Promise((resolve, reject) => ws.onOpen((i, e) => resolve(i, e), reject))
同样在这里,resolve
只接受一个参数,因此,i
将是promise解析的值——即使您对它并不感兴趣。这就是为什么我们可以将所有这些缩短为:
new Promise(ws.onOpen.bind(ws))
同样的原则也适用于
onClose
resolve=>{resolve()})
感谢您的帮助和良好的解释!我很感激!!不客气。如果它解决了你的问题,别忘了。