【问题标题】:What will happen if I use async/await with the function that returns nothing?如果我将 async/await 与什么都不返回的函数一起使用会发生什么?
【发布时间】:2019-06-12 23:41:15
【问题描述】:

首先,我是 javascript 的初学者,尤其是 async/await/promise。

我想在视频库(react-native-youtube) 中同步使用seekTo() 方法。在MDN guide 中,它表示 Await Expression 需要 Promise 或一些值。是否可以使用seekTo() 方法,即使它什么也不返回?

initVideo = async () => {
  await this._youTubeRef && this._youTubeRef.seekTo(startTime);
  this.setState({
    isPlaying: true
  });
}

如果有人对 react-native-youtube 库很了解,请告诉我如何将视频的 endTime 设置为部分播放。

【问题讨论】:

  • 异步函数基本上总是返回一个 Promise,即使在解决后 Promise 中没有包含任何内容,因此无论 Promise 解析为什么,等待 Promise 都应该有效。
  • 感谢您的评论@apokryfos!
  • 文档没有说 seekTo 返回一个承诺。为什么需要等待?
  • @estus 我只想为视频设置一个播放时间部分。 seekTo() 方法在调用后执行一些操作,它会花费几秒钟。虽然我没有提到我的问题,但我需要在 seekTo() 之后调用 setTimeout() 进行部分播放。

标签: javascript reactjs react-native async-await android-youtube-api


【解决方案1】:
  1. 如果函数(非异步)没有显式返回值,则在函数末尾返回undefined

  2. 您可以在异步上下文中很好地使用此类“不返回”函数 - 它们只是返回解析为未定义的 Promise

  3. 虽然我没有使用过您提到的库,但请始终记住 await x 是一个表达式,而不是一个语句。所以,如果 .seekTo 是异步的,你想要的是:

&& await this._youTubeRef.seekTo(startTime);

【讨论】:

  • 大部分是正确的,但由于函数是异步的,它总是返回一个承诺。如果您不指定返回值,该函数将返回一个解析为undefined 的承诺。
  • 谢谢,修复了
猜你喜欢
  • 2019-08-27
  • 2022-01-21
  • 2017-05-25
  • 2013-05-25
  • 2020-12-03
  • 1970-01-01
  • 2023-04-05
  • 2018-03-04
相关资源
最近更新 更多