当前位置: 首页 > 知识库问答 >
问题:

未捕获SyntaxError:await仅在异步函数和顶级模块体中有效

仲智
2023-03-14
const accounts = await web3.eth.getAccounts();

App = {
    load: async () => {
        await App.loadWeb3(
        await App.loadAccount()
        )
    },



loadWeb3: async () => {
    if (typeof web3 !== 'undefined') {
      App.web3Provider = web3.currentProvider
      web3 = new Web3(web3.currentProvider)
    } else {
      window.alert("Please connect to Metamask.")
    }
    // Modern dapp browsers...
    if (window.ethereum) {
      window.web3 = new Web3(ethereum)
      try {
        // Request account access if needed
        await ethereum.enable()
        // Acccounts now exposed
        web3.eth.sendTransaction({/* ... */})
      } catch (error) {
        // User denied account access...
      }
    }
    // Legacy dapp browsers...
    else if (window.web3) {
      App.web3Provider = web3.currentProvider
      window.web3 = new Web3(web3.currentProvider)
      // Acccounts always exposed
      web3.eth.sendTransaction({/* ... */})
    }
    // Non-dapp browsers...
    else {
      console.log('Non-Ethereum browser detected. You should consider trying MetaMask!')
    }
  },

    loadAccount: async () => {
        App.account = web3.eth.accounts[0]
        console.log(App.account)
    }
}

$(() => {
    $(window).load(() => {
        App.load()
    })
})

错误出现在第1行,我从Ganache获取帐户,但await仅对async有效
我应该对此代码进行哪些更改以删除错误?请帮帮我。

如果我删除这一行,错误表明它无法访问帐户,并且在此之后,wait不起作用。

有没有办法把这段代码做成ASYNC函数的形式?

共有1个答案

陆星文
2023-03-14

wait调用只能在标记为async的函数中进行。由于您在第1行中使用了wait,因此它没有包装在async函数中。您可以将代码包装在一个async函数中,然后调用该函数。e、 g类似于:

js prettyprint-override">const main = async () => { // <- the async wrapper function
 const accounts = await web3.eth.getAccounts();

 // .... rest of your code

 $(() => {
    $(window).load(() => {
        App.load()
    })
 })
}
main()

或者如果你想更高级,根本不保存功能

(async ()=>{
 const accounts = await web3.eth.getAccounts();
 // .... rest of your code
})() // <- call the function right after declaring it
 类似资料:
  • 我正在做一些非常简单的测试,关于使用csvtojson节点模块将csv文件读取为json格式,我使用下面的代码作为模板 我主要关注的是 //异步/等待使用 const jsonArray=wait csv()。fromFile(csvFilePath); 代码的部分。这是我的密码 无论我用哪种方法尝试,我总是会出现以下错误 或 如果我把代码转换成顶级的 我不明白这为什么不起作用。 编辑:我做了@t

  • 试图使一个chrome扩展刮一个网站,但它总是在内容完全加载之前(在manifest.json的文档读取后尝试) 每次有人叫我: 还尝试:

  • 在开始之前,我承认有几个问题可能听起来与我的标题类似,但是,我读到的所有问题都比我的代码更复杂,解释似乎与我的情况无关。 有人能帮我理解我的代码(下面的代码片段)中发生了什么导致了这个错误吗 未捕获SyntaxError:await仅在异步函数和顶级模块体中有效。 据我所见,导致错误的位于“顶层”主体中。或者是顶级身体的其他意思?谢谢! 编辑区别于其他建议(类似)的问题在这里:我的问题不涉及htt

  • 我有以下代码。 然而,它没有捕捉到所有的错误,我仍然得到“throw er//未处理的“错误”事件。 这是为什么呢? 例如,直到我添加了一个特定的错误处理程序,它才捕获parse()函数中的错误。即使不添加,我的try/catch是否应该捕获此错误? 提前致谢!

  • 我在中写了这段代码 然后我尝试在另一个文件中使用它 我得到一个错误 “等待仅在异步函数中有效” 问题是什么?