私はEthereumブロックチェーンで接続された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;
});
}
});
にコールバックと非同期プログラミングを理解するために、より役立つかもしれない...私はonCreated()メソッドに直接呼び出しを置くことによってそれを行うために管理し、ときました配列にプッシュすると毎回TemplateVar.setが使用されます。 – glaulom