我正在尝试编写我的第一个React Native应用程序,所以它并不复杂,只是为了熟悉它的一些特性。现在它有一个按钮,当我按下它时,文本字段会增加1,我还希望该按钮显示另一个我已导入的函数中的一些文本。
我有我的主要App.js和另一个文件,我将其导入到App.js中,其中包含返回字符串值的函数。
import { myFunction } from './JSFunctions/functions.js'
我的函数在单独运行时能够正常工作,并通过console.log将结果打印到控制台,但是当我添加以下代码行时:
return output
我得到的全部都是
Promise { <pending> }
我意识到我需要使用await
或.then
来转换promise,但我已经在桌子上敲了几个小时的头,试图让它工作,但我只是得到错误。
以下是函数:
export async function myFunction(){
\\lots of other code here that has been removed
var i;
var output;
for (i = 0; i < length; i++) {
output = DO STUFF AND CREATE A LONG STRING HERE
console.log(output) //produces the correct output to console
}
return output;
}
以下是 App.js 中的函数
export default class App extends React.Component {
constructor(props) {
super(props)
this.state = {
count: 0,
output_string: ''
}
}
onPress = () => {
this.setState({
count: this.state.count+1,
output_string: myFunction()
})
}
render(){
const handlePress = () => false
return (
<React.Fragment>
<View style = {styles.container}>
<TouchableOpacity
onPress={this.onPress}
>
<Text>
My First Button
</Text>
</TouchableOpacity>
<Text>Hello World! This is a text area.</Text>
<Text>{ this.state.count !== 0 ? this.state.count: null}</Text>
<Text>{this.state.output_string}</Text>
</View>
</React.Fragment>
);
}
}
async/await
关键字被引入来替代.then
。原因是.then
仍然采用嵌套回调的形式,可能会导致回调地狱,你可以将我的答案与被接受的答案进行比较,哪一个更容易理解?不过这当然是相对而言的。 - Isaacasync/await
可以提高可读性,我也提到这是相当主观的 :) - Isaacasync
版本,并且我会点赞你的回答,因为你是第一个介绍async
方法的人。 - Brian Adams