调用 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一个未决的承诺:)