generated at
簡単WebSocket Promise wrapper
WebSocketを適当にPromise wrapperしたもの
さっと試したい時に使う

2021-09-27
22:52:55 ws-promisifiedに移動した
2021-09-20
22:03:37 そもそも、WebSocketで発生するerrorはthrowされるのだろうか?それともすべて error eventとしてcallbackが呼び出されるのだろうか?
どっちだかわからん
21:32:59 Githubに移しておこうかな
名前はws-promisifiedでいいや
21:32:35 接続開始時以外errorをcatchできていないのはよくないな
直そう
21:36:18 不必要にPromiseがネストされているのもよくない
外側のpromiseはasync-awaitで書き換えられるはず
無理だった
open eventのcallbackでresolveしないといけない

vim+Denoで書いた
mod.ts
type Return = { close: () => Promise<Event | undefined>; send: (data: string | ArrayBufferLike | Blob | ArrayBufferView) => void; receive(): AsyncGenerator<MessageEvent>; }; export function createWS(url: string, protcols?: string | string[]) { return new Promise<Return>((resolve, reject) => { const socket = new WebSocket(url, protcols); const once = ( type: keyof WebSocketEventMap, callback: (event?: Event | MessageEvent | CloseEvent) => void, ) => { const wrapper = (e: Event | MessageEvent | CloseEvent) => { callback(e); socket.removeEventListener(type, wrapper); }; socket.addEventListener(type, wrapper); }; once("error", reject); once("open", () => resolve({ close: () => new Promise((res) => { socket.close(); once("close", (e) => res(e)); }), send: (data) => { socket.send(data); }, receive: async function* () { while (true) { const response = await new Promise((res) => once("message", (e) => res(e)) ); yield response as MessageEvent; } }, })); }); }

2021-09-20 21:45:39 直したやつ
ws-promisifiedに移した

browser用
mod.js
function v(o,i){return new Promise((a,c)=>{let t=new WebSocket(o,i),r=(e,s)=>{let n=p=>{s(p),t.removeEventListener(e,n)};t.addEventListener(e,n)};r("error",c),r("open",()=>a({close:()=>new Promise(e=>{t.close(),r("close",s=>e(s))}),send:e=>{t.send(e)},receive:async function*(){for(;;)yield await new Promise(s=>r("message",n=>s(n)))}}))})}export{v as createWS};

#2021-09-27 22:38:30
#2021-09-20 22:17:21
#2021-07-29 04:12:33
#2021-07-24 21:41:48