关注this,我想做一些漫长的过程,并在完成此过程后then
设置我的状态。
我正在做以下例程:
constructor(props) {
super(props);
let MyParameter = this.props.navigation.state.params.Whatever;
getResults(MyParameter).then((response) => {this.setState({isLoading: false, result: response })});
this.state = {
isLoading: true,
result: null,
resultDS: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }),
}
}
// ..
async getResults(parameter: Object)
{
let finalResult = [];
await var myfunc = function() { // Do the long process and populate finalResult}
return finalResult;
}
我关注var functionName = function() {} vs function functionName() {}和When should I store a function into a variable?,但仍然收到错误:
第
上的未预期令牌await var myfunc = function() { /* ... */ }
行
我该如何解决这个问题?
答案 0 :(得分:1)
这样的东西?
async getResults(parameter: Object)
{
let finalResult = [];
const myFunc = async function() { /* Do the long process and populate finalResult */ };
await myFunc();
return finalResult;
}
或者更简洁的方法是让长时间运行的进程函数在完成后返回finalResult,这样你就不必在getResults的范围内维护finalResult,如果它在myFunc之外是不相关的。
async getResults(parameter: Object)
{
const myFunc = async function() { /* Do the long process and return finalResult */ };
return myFunc();
}
返回时 await
关键字对于异步函数返回async函数是多余的,因此不是必需的。
重要的是你的长时间运行过程不会过早返回,所以如果其中的任何内容使用回调或异步,那么一定要适应它。
答案 1 :(得分:0)
我认为你应该这样做:
var finalResult = await YOUR_FUNCTION_DOING_SOMETHING_LONG()
return finalResult.data // If response is an object.
但你的YOUR_FUNCTION_DOING_SOMETHING_LONG
也应该回复承诺。