Ich habe eine Vertragsmethode:
function setFile(string fName, string fileHash) public {
File memory file = File({fileName:fName,fileHash:fileHash});
files.push(file);
return something;
}
Web3.js-Code:
ContractInstance.setFile(file.name,hashResult,function(error, result) {
if(!error)
{
console.log("Transaction submitted");
}
else {
console.log("Error");
}
});
Wenn ich anrufe ContractInstance.setFile(browser side)
, öffnet sich Metamask und fragt nach dem Gaspreis. Wird beim Senden console.log("Transaction submitted");
ausgeführt, auch wenn die Transaktion nicht abgeschlossen ist.
Gibt es eine Möglichkeit, einen Rückruf in web3.js zu implementieren, sodass nach Abschluss der Transaktion (Vertragsmethode call
) eine Rückrufmethode ausgeführt werden sollte. Die Vertragsmethode gibt möglicherweise etwas zurück, das in der Datenbank gespeichert werden sollte.
Zwei Wege:
1) result
sollte die Transaktions-ID enthalten. Fangen Sie das auf und erstellen Sie ein watch
dafür, das in einem Block angezeigt wird.
2) Protokollieren Sie ein Ereignis in Ihrer setFile
Funktion und hören Sie darauf.
Beachten Sie, dass selbst wenn eines dieser Ergebnisse Ihnen mitteilt, dass Ihre Transaktion in einen Block geraten ist, diese später wieder verschwinden kann, wenn der Block, in dem sie sich befand, verwaist ist. Wenn Ihnen das wichtig ist, warten Sie vielleicht lieber mehrere Blöcke und vergewissern Sie sich, dass Ihre Datei noch da ist, bevor Sie den Benutzer benachrichtigen, dass sie fertig ist.
Vivek Sadh
Edmund Edgar