【问题标题】:How to call async/await function asynchronously in other functions?如何在其他函数中异步调用 async/await 函数?
【发布时间】:2020-09-02 07:56:08
【问题描述】:

我创建了将被多次调用的通用函数,并且该函数是 async/await 类型的。

const storeData = async () => {
   await User.create({name: "Test 123"})
}

现在,如果我想在许多不同的函数中异步调用函数 storeData,我是在它前面加上 await 调用它(下面的选项 1)还是因为它内部有 async await,所以将作为异步函数运行并且前面不需要等待(下面的选项2)?

(注意:我可以做一些变通方法,让 storeData 返回一个新的 Promise,然后在 Promise 中做一些事情,并确保 await 真的很重要。)

选项 1。

async dummy1() {

   await storeData();

   ...rest of thte code

}

选项 2。

async dummy2() {

   storeData();

   ...rest of the code

}

【问题讨论】:

  • "我可以做一些变通方法并让 storeData 返回一个新的 Promise" - storeData 已经确实返回了一个承诺,因为你做到了async 函数。这意味着如果您希望 ...rest of the code 在该承诺履行后运行,您需要在调用前放置一个 await

标签: javascript asynchronous async-await


【解决方案1】:

在 javascript 中,所有异步函数都与返回承诺的常规函数​​相同。 async 只是语法糖。所以,如果你在函数调用之前使用await,函数调用会阻塞执行,如果你不使用await,那么它会按照你的意愿异步运行。

阅读更多here

【讨论】:

  • 在您提供的链接中,在他的第一个代码 sn-p 中,在第 16 行,他正在调用函数 asyncCall();他如何确保函数 asyncCall();是异步运行的?我熟悉 Promises 和 Async/Await 的工作原理,但我找不到这个特定的问题。也许你没有很好地理解我的问题
  • 异步函数总是异步运行,await 只是一个承诺的语法糖。
  • 所以你的意思是,不管我是否在它前面放了await,它都会异步运行,因为在它里面,它实际上是异步的?
  • 如果你在dummy1 中运行await storeData()storeData 的运行会和你没有把await 放在前面一样,但是dummy1 会等待storeData 到在继续之前完成。
猜你喜欢
  • 2017-06-13
  • 2019-07-24
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2020-01-31
  • 2021-06-06
  • 2021-01-17
相关资源
最近更新 更多