【问题标题】:promises scope using await and async使用 await 和 async 承诺作用域
【发布时间】:2018-11-23 18:26:59
【问题描述】:
      var accountA;
       var  accountB;
      accounts = async () => {
        accountA = await server.loadAccount(Apub)

        console.log(accountA)
        accountB = await (server.loadAccount(Bpub))
    }

  accounts()

  console.log(accountA);

1) Apub 是我已经声明的公钥

2)当我打印时

帐户A

在函数内部,它向我显示来自 accountA 的完整详细信息

3) 当我在函数外执行 console.log 时,输出为

未定义

4) 我已将函数外部的变量声明为全局范围

请帮帮我

【问题讨论】:

    标签: javascript node.js async-await es6-promise


    【解决方案1】:

    虽然您在函数内部使用await,但您不会等到它得到响应,而您调用accounts 这是一个异步函数

    var accountA;
    var  accountB;
    accounts = async () => {
        accountA = await server.loadAccount(Apub)
    
        console.log(accountA)
        accountB = await (server.loadAccount(Bpub))
    }
    
    accounts().then(() => {
        console.log(accountA);
    })
    

    如果您在异步函数中有上述代码,那么您也可以将 await 与 accounts 一起使用

    await accounts()
    

    【讨论】:

    • Thnks 但我有点困惑,我在函数内部初始化了值,但为什么我看不到值
    • 那是因为accounts()之后的console.log在accounts内部的异步请求还在处理中的情况下被执行。你必须阅读javascripts中的事件循环才能了解更多
    【解决方案2】:

    您的 accounts 函数是异步的。因此,在帐户有时间完成之前,首先调用最后一行中的 console.log()。这就是它显示未定义的原因。您必须等待 accounts 完成后才能打印,方法是在调用前添加“await”。

    var accountA;
    var  accountB;
    accounts = async () => {
        accountA = await server.loadAccount(Apub)
    
        console.log(accountA)
        accountB = await (server.loadAccount(Bpub))
    }
    
    await accounts()
    
    console.log(accountA);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 2016-02-02
      • 2021-12-01
      • 2021-11-27
      • 2016-05-20
      相关资源
      最近更新 更多