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應該返回一個承諾。

相關問題