У меня есть умный контракт, функция которого возвращает некоторые значения на основе сохраненных данных. Функция является защитной, как показано ниже
function getPaperValues(uint _paperId) public view returns(string memory title,string memory ipfscid,address author,PaperStatus status,address[] memory reviewers,bytes32[] memory keywords,uint version)
{
return (paperFiles[_paperId].title,paperFiles[_paperId].ipfs_cid,paperFiles[_paperId].author,paperFiles[_paperId].status,paperFiles[_paperId].reviewers,paperFiles[_paperId].keywords, paperFiles[_paperId].version_number);
}
Она прекрасно работает, если я вызываю ее через javascript, но у меня есть ситуация, когда мне нужно вызывать эту функцию внутри javascript под a для l oop. Проблема в том, что параметр "index" , когда я передаю это paperContractObj.getPaperValues , возвращает мне правильные значения из блокчейна, но параметр "Index" значение меняется. Кажется, что функция не синхронизирована должным образом со временем вызова и временем результата.
for (loop = 0; loop < result.length-1; loop++)
{
var index = result[loop];
// this function takes index and return correct values as per associated index
paperContractObj.getPaperValues(index,{from:account},function (err, result2) {
// On this line index value shows different values even though result I received inside result2 is associated with the correct index.
console.log("loop: -"+index); //need to fix this part loop id not coming properly it shows
if (err) {
console.log("CALL-ERROR-REASON: "+JSON.stringify(err));
console.log("REASON: Unable to retrieve Paper values by Ids");
}
else {
console.log("CALL-SUCCESS: "+JSON.stringify(result2));
console.log("CALL-ACHIEVE: Recieved current papers values via ids successfully"+result[loop]);
addListHtmlDivs(result2,index);
// Here values from the chain is coming fine but index which was provided as a parameter to this function is changed or different
}
});
}
Как я могу убедиться, что параметр внутри этой контрактной функции не изменяется из-за for l oop.