【问题标题】:how to call async function in response如何调用异步函数作为响应
【发布时间】:2021-05-09 07:39:21
【问题描述】:

我需要在响应函数中使用await,但我不知道怎么做。
(注意:func2() 是一个异步函数)

async function get_data() { 
  for (i = 0; i < 10; i++) {
    // http request, returns json...
    await func1(data1, data2).then(json => {   
      if (json.value < 100) {
        await func2(); //error => await is only valid in async function
      }  
    }) 
  }
}

我要等func2,怎么办?

我试过了:

async function get_data() { 
  for (i = 0; i < 10; i++) {
    await func1(data1, data2).then(json =>
      async function() { // nothing happens, function doesnt work.
        if (json.value < 100) {
          await func2();   
        }  
      }) 
  }
}

【问题讨论】:

    标签: javascript asynchronous async-await promise


    【解决方案1】:

    如果您不混合使用await.then(),通常会更容易。由于您想要对两个操作进行排序,并且您似乎也希望对 for 循环进行排序,因此只需 await 就更简单了。

    async function get_data() {
      for (let i = 0; i < 10; i++) {
        let json = await func1(data1, data2);
        if (json.value < 100) {
          await func2();
        }
      }
    }
    

    【讨论】:

    • 非常感谢,这一天我一直在努力解决这个问题 :)
    【解决方案2】:

    你可以去掉.then(),改用await

    awaitfunc1 并获取value 然后检查value 是否满足条件以及是否满足await func2

    查看下面的演示 sn-p:

    async function get_data() {
      for (i = 0; i < 10; i++) {
        const { value } = await func1("Hello", "World");
        if (value < 100) {
          console.log(await func2(value));
        }
      }
      console.log("END!")
    }
    
    const func1 = (d1, d2) =>
      new Promise((res) => setTimeout(() => res({ value: Math.random(0) * 200 }), 200));
    
    const func2 = (v) => new Promise((res) => setTimeout(() => res(v), 200));
    
    get_data();

    【讨论】:

    • @CüneytKılıç 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2016-11-03
    • 2021-08-07
    • 2021-07-31
    • 2015-06-18
    • 2020-03-09
    • 2018-10-03
    • 2022-01-19
    相关资源
    最近更新 更多