在 Javascript 中链接 promises 时,如果链中间的一个函数不返回任何内容,但仍执行需要在继续之前完成的异步操作,会发生什么情况?
下一个 'then()' 是否等待前一个异步函数解析,即使它没有传递任何值?
编辑:这是一个应用示例:
connectDatabase()
.then(() => createTables())
.then(() => fillTables())
.then(() => selectTables)
.then(tables => showTables());
此代码仅表示创建 SQLite 数据库和一些进一步的操作以最终显示表值。
connectDatabase()
是一个异步函数。创建数据库后,该函数不需要返回任何内容,因为数据库存储在某个全局函数中(用于 promise 链之外)。下一步不需要任何参数,尽管它需要创建数据库以在其中插入表。
createTables()
函数异步创建一些表,一旦完成,它什么都不返回,然后可以调用下一个函数。
selectTables()
只是使用 sql SELECT
命令将表值存储在变量中并将其返回给下一个函数。
showTables()
使用传递给它的表值并显示在屏幕上。
最佳答案
如果 promise 链中的函数解析一个值,那么链中的后续函数将有权访问已解析的值。例如,在您的示例中,如果 createTables
解析了一个值,那么该解析值将作为参数提供给链中的下一个函数(在本例中,(resolvedValue) => fillTables ()
).
如果它没有解析值(只是调用 resolve()
没有参数,或者在 async
函数的情况下不返回值),那么链中的以下 promise 将不会收到任何参数。
所以,是的,下一个 then
将始终等待前一个 promise 解析(无论它是否解析为一个值)。
编辑:根据 Lennholm 的反馈删除/更正了我的答案的第一部分(谢谢!)。 then
将默认返回一个 promise,因此它始终是 then-able
。如果传递给 then 的回调函数返回一个 promise,那么 then
的 promise 将解析为回调解析的值;如果回调不返回 promise ,则 then
将简单地解析回调返回的值。
有关这方面的更多信息,请查看以下答案:https://stackoverflow.com/a/46142909/815086
关于JavaScript:在 promise 链中,如果中间的一个函数什么都不返回但仍然执行异步操作,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796289/