then()函数是否返回反映先前承诺结果的承诺?
我是新的承诺,并研究过它。所以我的代码和我的理解:
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
时(如果connect成功)。 then
接受回调,即“successCB”,“failureCB”作为参数,实际上代表connect
承诺返回的结果或错误。正确?
此外,“successCB”正在返回承诺(来自.query
)。
then
再次呼吁then
返回的先前承诺。
如果在then
上使用connect()
,为什么then
接受回调?由于connect
已经返回结果即“successCB”,它如何知道connect
的成功?
如果你是对的,我不是百分之百确定,但这就是我解释它的方式。让我们说我们有一个承诺A.
- 调用
then()
总是返回一个新的承诺(让我们称之为B) - 如果回调返回一个promise C,那么promise B将以promise C的结果解析或失败。
- 如果任何回调返回非承诺值X,则承诺B将以值X解析
- 如果在回调中抛出异常,则promise B将失败并返回异常。
- 如果主要承诺A失败,并且没有给出失败回调,则承诺B也将失败并出现相同的错误。
就个人而言,我发现学习这一点非常困惑,因为它需要一个非常复杂的心智模型来完全掌握这一点。我完全理解这一天是我写自己的Promise
课程的那一天。我会建议任何完全想要掌握每个细节承诺的人花时间来做这件事。
then()函数是否返回反映先前承诺结果的承诺?
我是新的承诺,并研究过它。所以我的代码和我的理解:
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
时(如果connect成功)。 then
接受回调,即“successCB”,“failureCB”作为参数,实际上代表connect
承诺返回的结果或错误。正确?
此外,“successCB”正在返回承诺(来自.query
)。
then
再次呼吁then
返回的先前承诺。
如果在then
上使用connect()
,为什么then
接受回调?由于connect
已经返回结果即“successCB”,它如何知道connect
的成功?
如果你是对的,我不是百分之百确定,但这就是我解释它的方式。让我们说我们有一个承诺A.
- 调用
then()
总是返回一个新的承诺(让我们称之为B) - 如果回调返回一个promise C,那么promise B将以promise C的结果解析或失败。
- 如果任何回调返回非承诺值X,则承诺B将以值X解析
- 如果在回调中抛出异常,则promise B将失败并返回异常。
- 如果主要承诺A失败,并且没有给出失败回调,则承诺B也将失败并出现相同的错误。
就个人而言,我发现学习这一点非常困惑,因为它需要一个非常复杂的心智模型来完全掌握这一点。我完全理解这一天是我写自己的Promise
课程的那一天。我会建议任何完全想要掌握每个细节承诺的人花时间来做这件事。