1

require使用 JavaScript/TypeScript 使用或导入和模块初始化通常很简单import。我无法从 JS IPFS网站运行基本示例来初始化ipfs.

如果我按照一般说明进行操作,我会收到错误消息:Module parse failed: Cannot use keyword 'await' outside an async function (6:13)

这是关键代码:

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

如果我按照建议将ipfs创建放在一个async函数中,我只会推迟不可避免的事情。如果我两次调用这样的函数,我会从Unhandled Rejection (LockExistsError): Lock already being held for file: ipfs/repo.lock. 似乎我可以创建一个 hack 来测试是否ipfs已创建并将其全局初始化为一个模块为 null,但这仍然是一个 hack。

我应该如何实现或重构const ipfs = await IPFS.create();而不出错?

4

2 回答 2

1

可能您的 Node 版本早于版本 14,并且不支持在顶层调用 await。您必须处于异步块的上下文中。您可以执行以下操作:

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()

检查https://v8.dev/features/top-level-await以了解有关 v8 引擎中的更多信息。并且还发现了这篇关于 Node 14 支持的帖子:https ://pprathameshmore.medium.com/top-level-await-support-in-node-js-v14-3-0-8af4f4a4d478

于 2021-03-23T00:27:49.233 回答
1

就我而言,这是由于我连续多次不必要地初始化 IFPS。在确保 IPFS 实例仅在我的应用程序启动时初始化一次后,我能够解决该错误。

let ready = false
if(!ready) {
  const ipfs = await IPFS.create()
  ready = true
}
于 2021-12-10T07:34:38.793 回答