11

I'm working with React, Next.Js, semantic-ui-react and Solidity. It is my goal to print out the users address (from MetaMask) and a ProjectTitle (set by User) as meta infomation for a semantic-ui-react card. To print out the address in the 'header' is working, but I'm not able to print out the ProjectTitle as 'meta'. The Title should be a String but I'm receiving a Object Promise.

static async getInitialProps() {
    const projects = await factory.methods.getDeployedProjects().call();
    return {
        projects
    };
}

async getProjectTitle(address) {
    let title;
    try {
        title = await factory.methods.projectTitle(address).call();
    } catch (err) {
        console.log('err');
    }
    return title;
}

renderProjects() {
    const items = this.props.projects.map(address => {
        return {
            header: address,
            color: 'green',
            description: (
                <Link route={`/projects/${address}`}>
                    <a>View Project</a>
                </Link>
            ),
            **meta: this.getProjectTitle(address)**,
            fluid: true,
            style: { overflowWrap: 'break-word' }
        };
    }, );
    return <Card.Group items={items} />
}

Part of the Solidity Contract:

address[] public deployedProjects;
mapping(address => string) public projectTitle;

function createProject(string startup, string title, string deadline, string description, uint wage) public {
    address newProject = new Project(startup, title, deadline, description, wage, msg.sender);
    projectTitle[newProject] = title;
    deployedProjects.push(newProject);
}

function getDeployedProjects() public view returns (address[]) {
    return (
        deployedProjects
    );
}

The basic framework is from the Udemy Course "Ethereum and Solidity: The Complete Developer's Guide" by Stephen Grider.

Saensation
  • 251
  • 1
  • 2
  • 7
  • 1
    You can't "convert" the Promise; you have to `await` the function call or else explicitly use `.then()` and a callback function. – Pointy Jul 09 '18 at 16:36
  • Ok, thank you. That's the answer I was expecting. But that brings me to another question which might be quite simple. I wrote the following lines: _var title = this.getProjectTitle(address).then(res => { console.log('res ', res); });_ 'res' brings the type (string) which I need. But I don't know how to transfer the variable to the meta tag. Maybe I'm a bit slow today. – Saensation Jul 09 '18 at 17:02

1 Answers1

14

There is no direct way to convert an Object Promise into a String. The only way to continue processing is to call an await function or use .then() and a callback function.

Saensation
  • 251
  • 1
  • 2
  • 7