Tengo un método de contrato:
function setFile(string fName, string fileHash) public {
File memory file = File({fileName:fName,fileHash:fileHash});
files.push(file);
return something;
}
Código Web3.js:
ContractInstance.setFile(file.name,hashResult,function(error, result) {
if(!error)
{
console.log("Transaction submitted");
}
else {
console.log("Error");
}
});
Cuando llamo ContractInstance.setFile(browser side)
, metamask se abre y pregunta por el precio de la gasolina. Al enviar, console.log("Transaction submitted");
se ejecuta incluso cuando la transacción no se completa.
¿Hay alguna manera de implementar una devolución de llamada en web3.js de modo que cuando se complete la transacción (método de contrato call
), se debe ejecutar un método de devolución de llamada? El método de contrato podría devolver algo que debería guardarse en la base de datos.
Dos caminos:
1) result
debe contener el ID de la transacción. Captura eso y crea un watch
para que aparezca en un bloque.
2) Registre un evento en su setFile
función y escuche eso.
Tenga en cuenta que incluso si uno de esos resultados le dice que su transacción se ha metido en un bloque, posteriormente puede desaparecer de nuevo si el bloque en el que estaba queda huérfano. Si esto le importa, es posible que prefiera esperar varios bloques y asegurarse de que su archivo aún esté allí antes de notificar al usuario que está listo.
vivek sadh
Edmundo Edgar