Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在回调中解析承诺_Typescript_Promise_Async Await - Fatal编程技术网

Typescript 在回调中解析承诺

Typescript 在回调中解析承诺,typescript,promise,async-await,Typescript,Promise,Async Await,我的客户端websocket提供了为某些事件注册回调的方法,例如当连接打开或关闭时。在这些回调中,我想解决一个承诺,这样我就可以等待外部事件的发生。我在单元测试中使用它。我想要这样的东西: let wsOnOpenPromise = new Promise<void>(resolve => { /* ??? */ }); let wsOnClosePromise = new Promise<void>(resolve => { /* ??? */ }); co

我的客户端websocket提供了为某些事件注册回调的方法,例如当连接打开或关闭时。在这些回调中,我想解决一个承诺,这样我就可以等待外部事件的发生。我在单元测试中使用它。我想要这样的东西:

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()})
感谢您的帮助和良好的解释!我很感激!!不客气。如果它解决了你的问题,别忘了。