【问题标题】:How to declare a function variable and await for it to finish?如何声明一个函数变量并等待它完成?
【发布时间】:2017-05-20 04:14:22
【问题描述】:

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() { /* ... */ } 线上的意外令牌

我该如何解决这个问题?

【问题讨论】:

  • var myfunc = function() { ... } 声明了一个函数。仅当您想等待异步函数完成时才使用await,即您调用一个函数。
  • @MikeC 比如var myFunc = function () {} 然后return await myFunct()?

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


【解决方案1】:

这样的?

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

  await myFunc(); 
  return finalResult;
}

或者更简洁的方法是让长时间运行的进程函数在完成后返回 finalResult,这样如果它在 myFunc 之外不相关,您就不必在 getResults 范围内维护 finalResult。

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

await 返回关键字对于异步函数返回异步函数是多余的,因此没有必要。

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

【讨论】:

  • 为什么return MyFunc() 有括号?写return myFunc会有什么不同吗?
【解决方案2】:

我认为你应该这样做:

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

但你的YOUR_FUNCTION_DOING_SOMETHING_LONG 也应该返回一个承诺。

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多