Erc-721

在我的 ERC-721 合約中,tokenURI 不返回字元串,而是返回 Promise

  • June 16, 2022

在我的 Solidity 合約中,tokenURI 的函式如下所示:

function tokenURI(uint256 tokenId)
 public
 view
 virtual
 override
 returns (string memory)
{
 require(
   _exists(tokenId),
   "ERC721Metadata: URI query for nonexistent token"
 );
 
 if (revealed == false) {
   return string(notRevealedUri);
 }

 string memory currentBaseURI = _baseURI();
 return
   bytes(currentBaseURI).length > 0
   ? string(
     abi.encodePacked(
       currentBaseURI,
       tokenId.toString(),
       baseExtension
     )
   )
 : "";
}

請注意,我有一個 bool 來確定是否設置了“顯示的”tokenURI。我遇到的問題是 whenrevealed被設置為 false 但我已經呼叫setNotRevealedURI函式來實際將 設置notRevealedUri為一個值。我希望函式tokenURI給我這個notRevealedUri字元串,但它給了我一個 Promise:

> token.tokenURI(1);
Promise {
 <pending>,
 [Symbol(async_id_symbol)]: 501,
 [Symbol(trigger_async_id_symbol)]: 7,
 [Symbol(destroyed)]: { destroyed: false }
}
> 

我一直在使用安全帽 btw 與契約進行互動。

那麼如何讓這個函式輸出一個字元串呢?

所有合約互動都是非同步的,您需要使用awaitor then

await token.tokenURI(1);

引用自:https://ethereum.stackexchange.com/questions/130301