javascript - then() 函数是否返回反射(reflect)先前 promise 结果的 promise ?

标签 javascript node.js asynchronous promise async-await

刚接触promises,研究过。所以我的代码和我的理解:

sql.connect(config).then(function(connection) {
  return connection.request().query('select * from Users')
}).then(function(result) {
  console.dir(result);
  res.send(result);
}).catch((err) => {
  console.log(err);
  res.send(err)
});
}) // extra?

在第一行中,connect 方法返回一个 promise,因此当我调用函数 then(如果连接成功 ). then 接受回调,即“successCB”、“failureCB”作为参数,这些参数实际上表示 connect promise 返回的结果或错误。正确吗?

此外,“successCB”正在返回 promise (来自 .query)。

then 再次调用 then 返回的先前 promise 。

then 用于 connect() 的情况下,为什么 then 接受回调以及它如何知道 connect 是否成功,因为 connect 已经返回了结果,即“successCB”?

最佳答案

我不能 100% 确定您是否正确,但这就是我的解释方式。假设我们有一个 promise A

  • 调用 then() 总是 返回一个新的 promise (我们称它为 B)
  • 如果回调返回 promise C,则 promise B 将解决或失败,并返回 promise C 的结果。
  • 如果任何回调返回非 promise 值 X,则 promise B 将解析为值 X
  • 如果在回调中抛出异常,则 promise B 将因异常而失败。
  • 如果主 promise A 失败,并且没有给出失败回调,则 promise B 也会失败并出现相同的错误。

我个人觉得学习这个非常困惑,因为它需要相当复杂的心智模型才能完全掌握。我完全理解这一点的那一天就是我编写自己的 Promise 类的那一天。我会建议任何完全想在每个细节中把握 promise 的人花时间去做这件事。

关于javascript - then() 函数是否返回反射(reflect)先前 promise 结果的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54715051/

相关文章:

带有密码确认的 Javascript 表单验证

javascript - NodeJs : TypeError: require(. ..) 不是函数

node.js - Mongoose 种群如何运作

javascript - 如何使用单个回调异步排队和执行多个 Promise?

wcf - 使用 IIS 中托管的 WCF 中的 AspNetSynchronizationContext

javascript - 如何使用 web-animations-js 为 div 高度设置动画?

javascript - 按在 Internet Explorer 中不起作用的文本进行过滤

javascript - 如何使用以下代码停止 "fixed"元素?

node.js - 在 Ubuntu 中安装没有 sudo 的 NodeJS

c# - AsyncPostBackTrigger Gridview 分页