Что происходит , когда мы используем " callback
" в качестве ключевого слова в функции? И когда нам нужно его использовать? и что произойдет, если мы не используем его? Например, в следующем коде 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);
}
Обратный вызов в основном представляет собой функцию, которая передается другой функции и выполняется там, когда вы вызываете этот «обратный вызов». Очень простой пример можно найти в документации Mozilla .
Если вы не передаете никакого обратного вызова, в зависимости от кода функции это может повлиять или не повлиять на вашу программу, поскольку обратный вызов будет нулевым.
Некоторые методы web3 являются асинхронными и требуют обратного вызова.
Функция обратного вызова выполняется после завершения исходной функции и принимает в качестве аргумента хэш транзакции или что-то подобное.
Вы можете полностью избежать обратных вызовов, используя шаблон async/await.
Например:
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);
}
Спрашивающий
callback
противasync
? СпасибоСоджорно
Соджорно
Спрашивающий
.js
файл (Содержимое этого.js
файла можно посмотреть здесь .) Однако, когда я запускаю этот файл,node filename.js
я получаю сообщение об ошибке, что я загрузил снимок экрана Здесь . Я не знаю, где я иду не так. Еще раз спасибо.Соджорно
Спрашивающий
ethereumjs-abi
. Вот содержимое файла, который я запускаю. И вот сообщение об ошибке, которое я получаю. Кстати, когда я хочу установитьethereumjs-abi
, что используется в этом коде, я получаю это сообщение . Я не уверен, правильно ли он установлен. СпасибоСоджорно
Спрашивающий
var abi = require('ethereumjs-abi')
поверх кода ([ЗДЕСЬ] ( ibb.co/imjwPy )). Однако я получаю ту же ошибку ([ЗДЕСЬ]( ibb.co/bWvWrd )) Спасибо.Соджорно
Спрашивающий
soliditySHA3
) Еще раз спасибоСоджорно
Спрашивающий
sign
) я тоже добавилWeb3 = require("web3")
иweb3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
еще раз спасибоСпрашивающий
web3.eth.personal.sign
вместоweb3.personal.sign
иsign
решил, но новая ошибка ЗДЕСЬ: ibb.co/gAG2gd Еще раз спасибоСпрашивающий
web3.eth.defaultAccount
? Нам не нужно инициироватьdefaultAccount
значение? Спасибо