JavaScript:在 promise 链中,如果中间的一个函数什么都不返回但仍然执行异步操作,会发生什么情况?

标签 javascript es6-promise

在 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/

相关文章:

javascript - 如何覆盖删除期间jqGrid发送的id参数

javascript - 保持 Promise 链的可读性

javascript - $resource 回调(错​​误和成功)

javascript - JS/HTML - onresize 不触发

Node.js (ES6) - 使用 Promise.all 的 Promise 控制流

Javascript 类在 console.log 中返回不同的值

javascript - 如何在 promise.then () 中检索对此的引用?

javascript - Javascript ES6 promise 支持 'done' api 吗?

javascript - 对象到 Canvas javascript

javascript - 如何使js脚本全局可用?