javascript - Importer ipfs i TypeScript


Importering og modulinitialisering er generelt enkelt ved bruk av JavaScript/TypeScript ved å bruke enten require eller import. Jeg har problemer med å kjøre det grunnleggende eksemplet fra JS IPFS-nettstedet for å initialisere ipfs.

Hvis jeg følger de generelle instruksjonene, får jeg en feil: Module parse failed: Cannot use keyword 'await' outside an async function (6:13)

Dette er den kritiske koden:

const IPFS = require('ipfs-core');
const ipfs = await IPFS.create();

Hvis jeg følger forslaget om å plassere ipfs-opprettelsen i en async-funksjon, utsetter jeg bare det uunngåelige. Hvis jeg kaller en slik funksjon to ganger, får jeg en feil fra Unhandled Rejection (LockExistsError): Lock allerede holdes for fil: ipfs/repo.lock. Det ser ut til at jeg kunne lage et hack for å teste om ipfs allerede er opprettet eller ikke og initialisere det globalt i en modul som null, men det vil fortsatt være et hack.

Hvordan bør jeg implementere eller refaktorere const ipfs=await IPFS.create(); uten feil?

Svar #1

Sannsynligvis er din Node-versjon før versjon 14 og støtter ikke å kalle await på toppnivå. Du må være i konteksten av en asynkron blokk. Du kan gjøre noe som:

const IPFS = require('ipfs')

async function main() {
  const ipfs = await IPFS.create()
  /* Your code here */
}

// and now you can tell node to run your async main function...
main()

Sjekk https://v8.dev/features/top-level-await for mer informasjon om det i v8-motoren. Og jeg fant også dette innlegget om Node 14-støtte for det: https://pprathameshmore.medium.com/top-level-await-support-in-node-js-v14-3-0-8af4f4a4d478

Svar #2

I mitt tilfelle var det fordi jeg initialiserte IPFS unødvendig for mange ganger på rad. Etter å ha sørget for at IPFS-instansen bare initialiseres én gang når appen min starter, klarte jeg å løse feilen.

let ready = false
if(!ready) {
  const ipfs = await IPFS.create()
  ready = true
}

Relaterte artikler