0

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?和我仍然得到错误:

UnExpected token on line await var myfunc = function() { /* ... */ }

我怎样才能解决这个问题呢?

+0

'var myfunc = function(){...}'声明一个函数。当你想等待一个异步函数完成时,你只使用'await'即你调用一个函数。 –

+0

@MikeC所以像'var myFunc = function(){}'然后'返回await myFunct()'? –

回答

1

像这样的东西?

async getResults(parameter: Object) 
{ 
    let finalResult = []; 
    const myFunc = async function() { /* Do the long process and populate finalResult */ }; 

    await myFunc(); 
    return finalResult; 
} 

还是一个更清洁的方式将有完成后的长期运行过程函数返回finalResult,这样你就不必维护finalResult在getResults的范围,如果它不是在myfunc相关之外。在返回

async getResults(parameter: Object) 
{ 
    const myFunc = async function() { /* Do the long process and return finalResult */ }; 
    return myFunc(); 
} 

await关键字将是冗余的异步函数返回异步功能,所以是没有必要的。

重要的是您的长时间运行的过程不会过早返回,因此如果其中的任何内容使用回调或异步,那么一定要适应这一点。

0

,我认为你应该这样做:

var finalResult = await YOUR_FUNCTION_DOING_SOMETHING_LONG() 
return finalResult.data // If response is an object. 

还您YOUR_FUNCTION_DOING_SOMETHING_LONG应该返回一个承诺。

相关问题