【问题标题】:AngularJS/Javascript ternary operator code explanation required需要AngularJS/Javascript三元运算符代码解释
【发布时间】:2017-05-31 21:36:18
【问题描述】:

我在 Angular Material 网站上看到了这段代码:

function querySearch (query) {
      var results = query ? self.states.filter( createFilterFor(query) ) : self.states,
          deferred;
      if (self.simulateQuery) {
        deferred = $q.defer();
        $timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
        return deferred.promise;
      } else {
        return results;
      }
    }

谁能解释这里发生了什么?

如果查询不为空,我们调用过滤器,否则我们返回状态以及 ",defered" 部分是什么?

defered 还没有创建,我们也不能返回多个值!

那么这段代码的解释是什么?

代码在这里: https://material.angularjs.org/latest/demo/autocomplete 第一个(基本用法)

【问题讨论】:

    标签: javascript angularjs angular-material ternary-operator deferred


    【解决方案1】:

    这就是为什么三元不利于可读性的原因。该逗号与三元无关,因为它附加到变量声明。

    所做的只是声明(未定义的)变量deferred。

    您可以使用逗号语法一次声明多个变量,如下所示:

    var x = 4,
        y = 7,
        z = Math.random();
    

    【讨论】:

    • 欢迎来到工作保障的世界,编写如此糟糕和复杂的代码,他们别无选择,只能留住你!
    • 我们如何有时返回实际结果,有时返回一个承诺?我们如何区分调用方的结果?
    • 你不应该强迫自己陷入那种境地。由于一个好的结果是一个承诺,你应该让你的 else 返回一个 rejected Promise 值,这样无论如何,结果都可以是 then'd 并且它不会在你的返回值上创建一个奇怪的范围
    • 感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多