我正在建造一个与以太坊区块链相连的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;
}
第一种方法应该是异步的吗?
然后我在我的助手中有一个调用前一个函数的函数。这是我得到的最接近的版本,但它返回了一个承诺对象 使用此版本,我可以看到[{1}} [[PromiseValue]]是正确的 但是当我尝试使用{{#each files}}在我的视图中使用下面的代码显示它时,没有任何事情发生,而如果我返回tmp,我可以看到[Object Promise]。 阵列好发送?我应该如何显示数组?
console.log()
答案 0 :(得分:0)
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中的回调和异步编程