要访问对象的方法,我们使用点运算符,例如nameOfObject.nameOfMethod()
。这就是我对点运算符的理解。
对点运算符的这种理解并不能帮助我理解JavaScript中promise的语法。例如,参见下面的代码:
var askMom = function () {
willIGetNewPhone // calling the promise
.then(function (fulfilled1) {
// yay, you got a new phone
console.log(fulfilled);
})
.then(function (fulfilled2) {
// yay, you got a new phone
console.log(fulfilled2);
})
.catch(function (error) {
// ops, mom don't buy it
console.log(error.message);
});
}
在我看来,代码似乎在说-nameOfObject.thenMehtod().thenMethod().catchMethod();
我如何理解这一点?在JavaSript中使用nameOfObject.method1().method2().method3;
答案 0 :(得分:2)
调用.then()
时,您将像执行其他函数一样执行函数。然后,它返回一个承诺,也可以调用.then()
或.catch()
。
这通常称为“链接”。
答案 1 :(得分:1)
此特定用法(promise.then(...).then(...)
)看起来很相似,但与您的示例object.method1().method2().method3()
无关。在前一种情况(promise.then()
)中,每个后续.then()
的结果都是一个新的Promise
。在后一种情况下,所有方法通常都返回相同的对象,这使得可以进行链接,其中一个示例是EventEmitter
:
eventEmitter
.on('event1', func1)
.on('event2', func2);
在这里,每个.on()
返回相同的实例,因此可以进行这种方法链接。要进行链接,每个方法(上例中的on
)应返回当前实例(this
)。
答案 2 :(得分:1)
基础很简单:a.function()
接受输入并给出输出;输出可以是任何JavaScript object 。
现在,如果a.function()
返回类似于a
的内容怎么办?现在,您可以永远继续。这叫做 chaining -一个简单但功能强大的想法。
对于promise
,then
仅注册一个用promise
的解析值调用的函数。为了使链接成为可能,它还会返回一个promise
,并使用您提供给then
的函数进行解析。如果您不明白,只需进一步阅读promises
,它就会陷入困境。
使用arrow function语法希望这个小片段可以帮助您:
// getting the "resolver" to play around with
a = new Promise(_resolver_ => {resolver = _resolver_;});
// registering a "then"
b = a.then(result => {return result + 1;});
// resolving a
resolver(1);