承诺使用await和async的范围

时间:2018-11-23 10:19:38

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

      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)我已将函数外部的变量声明为全局范围

请帮助我

2 个答案:

答案 0 :(得分:2)

尽管您在函数内使用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);
})

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

await accounts()

答案 1 :(得分:0)

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

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

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

await accounts()

console.log(accountA);