【问题标题】:Syntax of Promises in javascript is confusingjavascript 中 Promises 的语法令人困惑
【发布时间】:2019-07-19 06:23:54
【问题描述】:

要访问对象的方法,我们使用点运算符,例如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;调用对象的方法是正常的

【问题讨论】:

标签: javascript promise


【解决方案1】:

当您调用.then() 时,您正在执行一个函数,就像其他函数一样。然后它返回一个也可以调用.then().catch() 的promise。

这通常被称为“链接”。

【讨论】:

    【解决方案2】:

    这种特殊用法 (promise.then(...).then(...)) 看起来很相似,但与您的示例 object.method1().method2().method3() 无关。在前一种情况下(promise.then()),每个后续.then() 的结果都是一个新的Promise。在后一种情况下,所有方法通常都返回相同的对象,这使得可以进行链接,例如EventEmitter

    eventEmitter
      .on('event1', func1)
      .on('event2', func2);
    

    在这里,每个.on() 返回相同的实例,因此这种方法链接是可能的。为了进行这种链接,每个方法(上例中的on)都应该返回当前实例(this)。

    【讨论】:

      【解决方案3】:

      基础很简单:a.function() 接受一个输入并给出一个输出;输出可以是任何 JavaScript object

      现在,如果a.function() 返回类似于a 的内容怎么办?现在你可以永远继续下去。它被称为 chaining - 一个简单但强大的想法。

      对于promisethen 只是注册一个使用promise 解析值调用的函数。为了使链接成为可能,它还返回一个promise,该promise 可以使用您提供给then 的函数进行解析。如果您不明白,请继续阅读promises,它会深入人心。

      希望这个使用arrow function语法的小sn-p可以帮助到你:

      // 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);
      

      【讨论】:

        猜你喜欢
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        • 2015-05-02
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多