无法传递数组以查看异步方法
问题描述:
我正在构建与以太坊区块链连接的Dapps。我有一个调用内部异步方法的JavaScript函数。无法传递数组以查看异步方法
async function getFiles(id, array){
if(id < 2){
myContract.consultFile.call(id,"0x2b461Db580028F263351B969cFd8542db696787E",function(err, res){
array.push({title : res[0], description : res[1]});
getFiles(++id, array);
});
}
return array;
}
此第一种方法应该是异步吗?
然后我在我的帮手中有一个函数调用前一个函数。这是我得到的最接近的版本,但它返回一个承诺对象。
有了这个版本,我可以看到console.log()
[[PromiseValue]]是正确的。
但是,当我尝试在下面的代码中用{{#each files}}显示它时,没有任何事情发生,而如果我返回tmp,我可以看到[Object Promise]。 它阵列发送?我应该如何显示数组?
Template.myDocuments.helpers({
'files': function(){
var tmp = getFiles(0,[]);
tmp.then(function(val){
console.log(val);
return val;
});
}
});
答
function displayFile(callback){
callback(0,[]);
}
function getFiles(id, array){
while(id++ < 2){
myContract.consultFile.call(id,"0x2b461Db580028F263351B969cFd8542db696787E",function(err, res){
array.push({title : res[0], description : res[1]});
}
console.log(array);
}
displayFile(getFiles);
上面的代码应该允许异步功能通过使用回调,其执行等待异步调用成功完成正常运行,据此,一切回调下方也将运行。不幸的是,由于回调是异步的,你不能从它返回一个值到一个同步函数。但是如果数组是全局的,那么在调用displayFile(getFiles)之后,它应该有你想要的值。
This可以理解在JavaScript
这种回调和异步编程,我没有工作更有帮助......我已经设法通过直接把呼叫到onCreated()方法和什么时候做每次使用TemplateVar.set推入数组。 – glaulom