У меня есть следующий договор о солидности
mapping (string => bool) private proofs;
mapping (address => string[]) public owns;
function registerAsset(string memory assetHash) public {
proofs[assetHash] = true;
owns[msg.sender].push(assetHash);
}
function checkIfRegistered(string memory assetHash) public view returns (bool) {
return proofs[assetHash];
}
function getSize(address key) public view returns (uint){
return owns[key].length;
}
function getAssets(address key) public view returns (string[] memory){
return owns[key];
}
После того, как я вызову registerAsset через async / await, как показано ниже
async function registerAsset(PoExContract, assetHash) {
const result = PoExContract.deployed().then((poe) => {
return poe.registerAsset(assetHash)
})
const transaction = (result !== null) ? result : null
return transaction
}
export function register() {
return async (dispatch, getState) => {
const { poExContract } = getState().contract
const { assetHash } = getState().asset
const transaction = await registerAsset(poExContract, assetHash)
if (transaction) {
dispatchAssetCreated(transaction, assetHash, dispatch)
} else {
dispatchCreationError(dispatch)
}
}
и вызовите метод getAssets,
async function getRegisteredAssets(PoExContract, account) {
const regsiterdAssets = PoExContract.deployed().then((poe) => {
return poe.getAssets(account)
})
return regsiterdAssets
}
export function getAssets(defaultAccount){
return async(dispatch, getState) =>{
const { poExContract } = getState().contract
let registeredAssets = await getRegisteredAssets(poExContract,defaultAccount)
console.log(registeredAssets)
dispatchAssets(registeredAssets, dispatch)
}
Я получаю массив с пустой строкой в console.log (зарегистрированный набор)
[" "]
Где как трюфельная консоль типа
truffle(development)> let instance = await PoExContract.deployed()
undefined
truffle(development)> let assets = await instance.getAssets('0x3E7Ff8055f225a019144365a3714c43c2a831e24')
undefined
truffle(development)> assets
[ 'fb90f1afe1de770fe175af0e27a1f85901f277005bfffb8ee502a7304e85b671' ]
Я не имею ни малейшего понятия, почему JS async / await возвращает массив с пустой строкой, где тот же метод на консоли трюфеля возвращает правильный результат.
[ 'fb90f1afe1de770fe175af0e27a1f85901f277005bfffb8ee502a7304e85b671' ]
Когда я провел дополнительное расследование, я обнаружил, что только недавно зарегистрированный актив не включен в список getAssets, но все предыдущие регистрации возвращаются правильно.