Javascript 中的全局变量以及如何 return 来自 then() JavaScript 函数的变量
Global variables in Javascript and how to return variables from then() JavaScript function
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 的新手,需要这个函数到 return 一个名为 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;
},
您需要 return 整个承诺而不是回答,因为您的操作是异步的。目前您正在 return 回答它是未定义的。所以.. 据我了解你的意图,你需要 return 整个 App.contracts.Stude.. 链。
现在我看到了大局:)
所以..
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。我认为如果我没有计算错括号,它应该可以工作;)
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 的新手,需要这个函数到 return 一个名为 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;
},
您需要 return 整个承诺而不是回答,因为您的操作是异步的。目前您正在 return 回答它是未定义的。所以.. 据我了解你的意图,你需要 return 整个 App.contracts.Stude.. 链。
现在我看到了大局:)
所以..
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。我认为如果我没有计算错括号,它应该可以工作;)