diff --git a/package.json b/package.json index 2b16d7c..eadd0bb 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "libkmodule": "^0.2.53", "libp2p": "^0.42.2", "multiformats": "^11.0.2", + "p-defer": "^4.0.0", "p-queue": "^7.3.4", "private-ip": "^3.0.0", "rewire": "^6.0.0", diff --git a/src/index.ts b/src/index.ts index 2f700e9..80ed5b4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,6 +38,7 @@ import { peerIdFromCID } from "@libp2p/peer-id"; import { bootstrap } from "@libp2p/bootstrap"; import { IDBBlockstore } from "blockstore-idb"; import { IDBDatastore } from "datastore-idb"; +import defer from "p-defer"; const basesByPrefix: { [prefix: string]: MultibaseDecoder } = Object.keys( bases @@ -49,10 +50,7 @@ const basesByPrefix: { [prefix: string]: MultibaseDecoder } = Object.keys( onmessage = handleMessage; -let moduleLoadedResolve: Function; -let moduleLoaded: Promise = new Promise((resolve) => { - moduleLoadedResolve = resolve; -}); +const moduleDefer = defer(); let swarm; let proxy: Proxy; @@ -205,7 +203,7 @@ async function handlePresentSeed() { dht(PeerManager.instance.ipfs), pubsub(PeerManager.instance.ipfs as any), ]); - moduleLoadedResolve(); + moduleDefer.resolve(); } async function handleStat(aq: ActiveQuery) { @@ -316,7 +314,7 @@ async function handleIpnsResolve(aq: ActiveQuery) { } async function ready() { - await moduleLoaded; + await moduleDefer.promise; await PeerManager.instance.ipfsReady; } diff --git a/src/peerManager.ts b/src/peerManager.ts index de45609..8a07356 100644 --- a/src/peerManager.ts +++ b/src/peerManager.ts @@ -5,6 +5,7 @@ import { fixed32, json, raw, uint } from "compact-encoding"; import { TcpSocketConnectOpts } from "net"; import { Helia } from "@helia/interface"; import { deserializeError } from "serialize-error"; +import defer from "p-defer"; import { CloseSocketRequest, ErrorSocketRequest, @@ -127,14 +128,14 @@ export default class PeerManager { this._ipfs = value as Helia; } - private _ipfsReady?: Promise; + private _ipfsReady?: Promise; private _ipfsResolve?: () => void; get ipfsReady(): Promise { if (!this._ipfsReady) { - this._ipfsReady = new Promise((resolve) => { - this._ipfsResolve = resolve; - }); + let ipfsDefer = defer(); + this._ipfsReady = ipfsDefer.promise; + this._ipfsResolve = ipfsDefer.resolve; } return this._ipfsReady as Promise;