我的render函数中的return中有一个按钮,它调用了一个函数,该函数启动了一个promise链,结果更新了一个状态变量。但是,不传递该值。
我在componentDidMount()上尝试了一些尝试,但没有任何运气
这是我的渲染函数中的按钮
addIPFSItem(){
var searchAddress = "0x9Cf0dc46F259542A966032c01DD30B8D1c310e05";
const contract = require('truffle-contract')
const simpleStorage = contract(SimpleStorageContract)
simpleStorage.setProvider(this.state.web3.currentProvider)
this.state.web3.eth.getAccounts((error, accounts) => {
simpleStorage.deployed().then((instance) => {
this.simpleStorageInstance = instance
return this.simpleStorageInstance.getLength(searchAddress);
}).then((accountLength) => {
var items = []
const ipfsPrefix = "https://ipfs.io/ipfs/";
var i;
for (i = 0; i < accountLength; i++) {
var currHash = this.simpleStorageInstance.getBook(searchAddress, i,
{from: searchAddress});
var currURL = ipfsPrefix + this.currHash;
//Here I am printing the counter values, and it prints the correct
//amount
console.log('itemhash ', i)
items.push(currHash)
}
//I do not get the value of items[1] in the console, but an undefined
//promise
console.log('address URL ', items[1])
//the state of ipfsHash is not updated correctly
return this.setState({ipfsHash: items[1]});
})
})
}
console.log('address URL',items[1])
应给出类似address URL 0x9CF0DC46F259542A966032C01DD30B8D1C310E05
的内容。但是,我得到的却是地址URLpromise{
。
您的this.SimpleStorageInstance.getBook
是一个promise,这意味着它是异步执行的。
要获得结果,您必须使用.then
或新语法async/await
。使用以下函数,您的items
数组将填充正确的数据:
如果选择此解决方案,则必须将async
关键字放在父函数名称之前
for (i = 0; i < accountLength; i++) {
items.push(await this.simpleStorageInstance.getBook(searchAddress, i, { from: searchAddress }))
}
const items = myAccounts.map(async () => await this.simpleStorageInstance.getBook(searchAddress, i, { from: searchAddress }))
问题内容: 在React Native中用作异步函数是一种好习惯还是应该避免呢? 我需要从安装组件时获取一些信息,但是我知道使之成为可能的唯一方法是使函数异步。 这有什么问题吗,还有其他解决方案吗? 问题答案: 让我们首先指出差异并确定差异可能如何引起麻烦。 这是异步和“同步” 生命周期方法的代码: 通过查看代码,我可以指出以下差异: 该关键字:在打字稿,这仅仅是一个代码标记。它做两件事: 强制将
问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做
我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。
我需要自动化一些web服务,为此我创建了一些方法,我想用Cucumber来实现,但是我不知道如何在下一步使用返回值。 所以,我有这个功能: 我有这个步骤: 有什么方法可以一步到另一步使用返回的值? 谢谢大家!
问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做
我有endpoint,它可以返回同步和异步结果 如何刻意返回某物,即同步?