javascript - JavaScript:在 Promise 链中,如果中间的一个函数什么都不返回但仍然执行异步操作会发生什么?
问题描述
在 Javascript 中链接 Promise 时,如果链中间的一个函数没有返回任何内容,但仍执行需要在继续之前完成的异步操作,会发生什么情况?
下一个“then()”是否等待前一个异步函数解析,即使它没有传递任何值?
编辑:这是一个应用程序示例:
connectDatabase()
.then(() => createTables())
.then(() => fillTables())
.then(() => selectTables)
.then(tables => showTables());
此代码仅表示 SQLite 数据库的创建和一些进一步的操作以最终显示表值。
connectDatabase()
是一个异步函数。创建数据库后,该函数不需要返回任何内容,因为数据库存储在某个全局函数中(用于在 Promise 链之外使用)。下一步不需要任何参数,尽管它需要创建数据库以在其中插入表。
该createTables()
函数异步创建一些表,一旦完成,它什么也不返回,并且可以调用下一个函数。
selectTables()
只需使用 sqlSELECT
命令将表值存储在变量中并将其返回给下一个函数。
showTables()
使用传递给它并显示在屏幕上的表值。
解决方案
如果 Promise 链中的函数解析了一个值,那么链中的以下函数将有权访问解析的值。例如,在您的示例中,如果createTables
解析了一个值,那么该解析的值将可用于链中的下一个函数作为参数(在本例中为(resolvedValue) => fillTables()
)。
如果它没有解析一个值(只是resolve()
不带参数的调用,或者在函数的情况下根本不返回一个值async
),那么链中的以下 Promise 将根本不会接收任何参数。
所以,是的,下一个then
将始终等待前一个承诺解决(无论它是否用值解决)。
编辑:根据 Lennholm 的反馈删除/更正了我答案的第一部分(谢谢!)。then
默认情况下会返回一个承诺,所以它永远是then-able
. 如果传递给 then 的回调函数返回一个 promise,则 thenthen
的 promise 将解析为回调解析的值;如果回调没有返回承诺,那么then
将简单地解析回调返回的值。
有关这方面的更多信息,请查看以下答案:https ://stackoverflow.com/a/46142909/815086
推荐阅读
- build - 使用自动工具为 MIPS 目标交叉编译 yuma123
- sql - sql pgadmin 困惑
- eclipse - 在eclipse上安装tomcat
- ios - 嵌套 DispatchQueue.main.async
- javascript - 如何获取连续数组元素的总和
- javascript - MathJax 方程包含多个带索引的求和
- angular - Angular Firebase - DocumentReference.set() 错误
- javascript - TS2451:无法重新声明块范围变量
- java - JavaFX:检查是否已设置事件处理程序/过滤器的方法?
- python - 带有滚动视图的 Kivy 1.10.1 下拉菜单无法在触摸时滚动