我正在调用一个返回数组的API,我试图遍历这个数组,但控制台说的是长度为0,以前从未见过类似的东西,无法在这里找出问题所在:
const funCall=async()=>{
const userNFTsURLs = await prepareData();
setNFTsUrls(userNFTsURLs);
}
const prepareData = async () => {
const res = await getUserNFTs();
console.log(res);
/*returns
0: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/4.json"
1: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/41.json"
2: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/45.json"
3: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/47.json"
4: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/49.json"
5: "ipfs://QmbNHPexuZWo3rnzAyyzZxTsAmMuN97R8Z7qwuPfEMXeX9/51.json"
length: 6
[[Prototype]]: Array(0)*/
console.log(res.length);//returns 0
res.map((rest: string) => console.log(rest));
const test = res.map((url: string) => {
console.log(url)//does not return anything is not being called
return url;
});
return res;
};函数,我只是控制台记录了最后一个forEach,它在登录到使用它的组件上之后会对它进行日志记录,这是非常奇怪的。
const getUserNFTs = async () => {
if (store.getState().blockChain.smartContract === null) {
await connectToContract();
}
try {
const balance = await getUserTokensBalance();
if (balance <= 0) {
return [];
}
let tokenIds = [];
for (let i = 0; i < balance; i++) {
const tokenId = await blockChain.smartContract.methods
.tokenOfOwnerByIndex(walletId, i)
.call();
tokenIds.push(tokenId);
}
let tokensList: any = [];
tokenIds.forEach(async (tokenId) => {
const token = await blockChain.smartContract.methods
.tokenURI(tokenId)
.call();
console.log("token", token);//logs it on console after logs al the other console logs
tokensList.push(token);
});
return tokensList;
} catch (error) {
console.log(error);
}
};我有什么没拿到的?经过几个小时的努力,我感到非常沮丧
发布于 2022-05-06 15:08:32
您的问题是您使用的是forEach,它没有像您预期的那样等待结果。
您应该将其修改为通常的for循环,以消除forEach中的async回调函数。
for(const tokenId of tokenIds) {
const token = await blockChain.smartContract.methods
.tokenURI(tokenId)
.call();
console.log("token", token);//logs it on console after logs al the other console logs
tokensList.push(token);
};https://stackoverflow.com/questions/72143239
复制相似问题