¿Qué sucede cuando usamos " callback
" como palabra clave en una función? ¿Y cuándo debemos usarlo? y ¿qué pasa si no lo usamos? Por ejemplo, en el siguiente código JavaScript:
function signPayment(recipient, amount, nonce, contractAddress, callback) {
var hash = "0x" + ethereumjs.ABI.soliditySHA3(
["address", "uint256", "uint256", "address"],
[recipient, amount, nonce, contractAddress]
).toString("hex");
web3.personal.sign(hash, web3.eth.defaultAccount, callback);
}
La devolución de llamada básicamente es una función que se pasa a otra función y se ejecuta allí cuando llama a esta "devolución de llamada". Se puede encontrar un ejemplo muy simple en los documentos de mozilla .
Si no pasa ninguna devolución de llamada, dependiendo del código de función, puede o no afectar su programa, ya que la devolución de llamada será nula.
Algunos métodos web3 son asíncronos y requieren una devolución de llamada.
La función de devolución de llamada se ejecuta una vez que se realiza la función original y toma un hash de transacción o similar como argumento.
Puede evitar las devoluciones de llamada por completo mediante el uso de un patrón async/await.
Por ejemplo:
async function signPayment(recipient, amount, nonce, contractAddress) {
var hash = "0x" + ethereumjs.ABI.soliditySHA3(
["address", "uint256", "uint256", "address"],
[recipient, amount, nonce, contractAddress]
).toString("hex");
var signed = await web3.personal.sign(hash, web3.eth.defaultAccount);
console.log(signed);
}
Preguntador
callback
vs.async
? GraciasSoggiorno
Soggiorno
Preguntador
.js
archivo (puede ver el contenido de este.js
archivo aquí ). Sin embargo, cuando ejecuto este archivo,node filename.js
recibo el mensaje de error que indica que cargué la captura de pantalla aquí . No sé dónde me estoy equivocando. Gracias de nuevo.Soggiorno
Preguntador
ethereumjs-abi
. Aquí está el contenido del archivo que ejecuto. Y aquí está el mensaje de error que recibo. Por cierto, cuando quiero instalarethereumjs-abi
lo que se usa en este código, recibo este mensaje . No estoy seguro de si está bien instalado. GraciasSoggiorno
Preguntador
var abi = require('ethereumjs-abi')
en la parte superior del código ([AQUÍ]( ibb.co/imjwPy )). Sin embargo, recibo el mismo error ([AQUÍ]( ibb.co/bWvWrd )) GraciasSoggiorno
Preguntador
soliditySHA3
) Gracias de nuevoSoggiorno
Preguntador
sign
) También agreguéWeb3 = require("web3")
yweb3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
Gracias de nuevoPreguntador
web3.eth.personal.sign
en lugar deweb3.personal.sign
ysign
está resuelto, pero el nuevo error está AQUÍ: ibb.co/gAG2gd Gracias de nuevoPreguntador
web3.eth.defaultAccount
? No necesitamos iniciardefaultAccount
el valor? Gracias