如何声明一个函数变量并等待它完成?

时间:2017-05-19 19:57:08

标签: javascript function asynchronous functional-programming async-await

关注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() { /* ... */ }

上的未预期令牌

我该如何解决这个问题?

2 个答案:

答案 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也应该回复承诺。