Javascript中的全局变量以及如何从then()JavaScript函数返回变量

问题描述 投票:0回答:2
ShowInfo : function (number) {

        var answer
        App.contracts.StudentState.deployed().then(function (instance) {
            return instance.showFName(number);
        }).then(function (Cert) {
            answer = Cert;
        })

        console.log(answer);
        return answer;

    },

这里是我一直试图完善的功能,我应该这样做。我是JavaScript新手,需要此函数返回一个称为answer的变量,但我总是将其定义为未定义,我知道在JavaScript中我不能轻易拥有全局变量,但是如何解决此代码?这与我从那里收到号码的以太坊智能合约有关。

感谢您的时间和精力。

这些是我目前正在使用的两条代码行:

var wrapper = document.getElementById("myHTMLWrapper");

    var myHTML = '';
    for (var i = 0; i < num; i++) {
        var ans =  App.ShowInfo(i);
        myHTML += '<span class="test">INFO:' + ans + '</span><br/><br/>';
    }

    wrapper.innerHTML = myHTML
ShowInfo : function (number) {

        var answer = App.contracts.StudentState.deployed().then(function (instance) {
            return instance.showFName(number);
        })

        console.log(answer);
        return answer;

    },
javascript blockchain ethereum web3js
2个回答
0
投票

现在我看到了大图景:)

so ..

ShowInfo : function (number) {

        var answer = App.contracts.StudentState.deployed().then(function (instance) {

     console.log(instance.showFName(number)) //this should be in [ans] later
     return instance.showFName(number); 
     //assuming that showFName returns string, not another promise

     })


        return answer; //this is still a Promise

    },

然后..

var wrapper = document.getElementById("myHTMLWrapper");

    for (var i = 0; i < num; i++) {
        App.ShowInfo(i).then(function(ans){
        wrapper.innerHTML+='<span class="test">INFO:' + ans+' ('+i.toString()  + ')</span><br/><br/>';
      })

    }

现在我看到您正在处理多个异步操作,这会使您感到复杂一些。.

如果处理多个承诺,则需要确定在其中任何一个解决(完成)还是全部完成时是否要采取行动(在您的情况下为显示结果)。>>

我选择在解决特定信息后随时更新您的html。我认为,如果我没有对括号进行错误的计算,它应该可以工作;)


0
投票

您需要返回全部承诺而不是回答,因为您的操作是异步的。目前,您返回的答案是不确定的。因此,据我所知,您需要返回整个App.contracts.Stude ....连锁店。

© www.soinside.com 2019 - 2024. All rights reserved.