调用 Solidity 函数时获取 Promise 对象
Getting Promise Object when Calling Solidity Functions
我在我的智能合约中有一个函数,我试图 return 一些存储在区块链中的数据,
function showOrg(address org) external view returns(uint international_securities_identifier, string memory organization_name, bool hasActivityStatus, string memory businessClassifier, string memory RegisteredAddress, string memory isDomiciledIn, bool sanStatus){
require(orgs[org].admins[msg.sender] == true, "You are not authorized to view this data!");
return(orgs[org].international_securities_identifier, orgs[org].organization_name, orgs[org].hasActivityStatus, orgs[org].businessClassifier, orgs[org].RegisteredAddress, orgs[org].isDomiciledIn, orgs[org].sanStatus);
}
我正在使用以下调用此函数,
var result = AMLContract.methods.showOrg('0xCe37A39e3EaB674572EDd4b37f33841774750b2F').send({from: contractAddress})
console.log(result);
但是,我一直得到的是一个 Promise 对象,有什么方法可以查看实际数据吗?还是我的做法不对?
您需要回调函数来解决承诺。像这样使用你的函数
AMLContract.methods.showOrg('0xCe37A39e3EaB674572EDd4b37f33841774750b2F')
.send({from: contractAddress}).then(function(receipt){
console.log(receipt)
});
receipt
将保存有关交易的信息。您可以在智能合约中使用 events
从任何函数发出所需的信息,然后使用 Web3 捕获它们。
详细了解 Web3.js 功能 here
我认为你应该在调用视图函数之前使用 await 我用这个东西解决了我的问题
const demo=await democontract.fn(params...)
cosole.log(demo)
因为如果你在没有它的情况下调用合约函数,它将return一个未决的承诺:)
我在我的智能合约中有一个函数,我试图 return 一些存储在区块链中的数据,
function showOrg(address org) external view returns(uint international_securities_identifier, string memory organization_name, bool hasActivityStatus, string memory businessClassifier, string memory RegisteredAddress, string memory isDomiciledIn, bool sanStatus){
require(orgs[org].admins[msg.sender] == true, "You are not authorized to view this data!");
return(orgs[org].international_securities_identifier, orgs[org].organization_name, orgs[org].hasActivityStatus, orgs[org].businessClassifier, orgs[org].RegisteredAddress, orgs[org].isDomiciledIn, orgs[org].sanStatus);
}
我正在使用以下调用此函数,
var result = AMLContract.methods.showOrg('0xCe37A39e3EaB674572EDd4b37f33841774750b2F').send({from: contractAddress})
console.log(result);
但是,我一直得到的是一个 Promise 对象,有什么方法可以查看实际数据吗?还是我的做法不对?
您需要回调函数来解决承诺。像这样使用你的函数
AMLContract.methods.showOrg('0xCe37A39e3EaB674572EDd4b37f33841774750b2F')
.send({from: contractAddress}).then(function(receipt){
console.log(receipt)
});
receipt
将保存有关交易的信息。您可以在智能合约中使用 events
从任何函数发出所需的信息,然后使用 Web3 捕获它们。
详细了解 Web3.js 功能 here
我认为你应该在调用视图函数之前使用 await 我用这个东西解决了我的问题
const demo=await democontract.fn(params...)
cosole.log(demo)
因为如果你在没有它的情况下调用合约函数,它将return一个未决的承诺:)