Обратный вызов вызывается не сразу, проблема в том, что вы не отправляете фактический адрес, который должен быть строкой, а отправляете номер:
0x64319ca297239d8652a0b5f0f12dd6666cb0e05b == 5.720054584403591e+47
И вы получаете 0
потому что этот неверный адрес, который вы отправляете, не существует в отображении:
mapping (address=>uint) map23;
И если он не существует, он вернет значение по умолчанию для uint
, которое равно нулю.
Отправьте строку, и она будет работать:
BasicToken.getNum('0x64319ca297239d8652a0b5f0f12dd6666cb0e05b', () => {})
Более того, если вы хотите, чтобы текущий пользователь только извлекал их собственное значение, и не позволяли другим пользователям извлекать эти данные (они могут, так как этопублично, но не так просто), вы должны использовать msg.sender
и удалить параметр функции.
function getNum() public view returns (uint) {
return map23[msg.sender];
}