代码之家  ›  专栏  ›  技术社区  ›  Guerrilla

什么是“const next,error=observer”语法?

  •  5
  • Guerrilla  · 技术社区  · 6 年前

    我正在阅读角度文档中的观察结果,我遇到了这个语法。

    const locations = new Observable((observer) => {
    
      const {next, error} = observer; 
    
      //...
    }
    

    进行什么类型的作业 const {next, error} = observer; ?

    我以前没见过这个。有人能给我正确的术语或是对正在发生的事情的详细描述吗?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Jefftopia    6 年前

    它叫 Destructuring Assignment .

    正如您注意到的,对于对象,键是变量的名称。请注意,这也适用于导入:

    //MY出口

    export class MyClass { //... }
    

    //MY进口

    import { MyClass } from './my-export.ts'
    

    这对于删除死依赖项的树抖动编译器特别有用。

    还可以指定从中获取变量值的键:

    const one = { id: 1 };
    const two = { id: 2 };
    
    const { id: first } = one;
    const { id: second } = two;
    
    console.log(first); // 1
    console.log(second); // 2
    

    还可以对数组使用destrucing赋值:

    const myArray = [1,2,3,4,5];
    const [foo, bar] = myArray;
    console.log(`${foo}, ${bar}`); // "1, 2"
    

    可以跳过数组中的元素:

    const [,,bat] = myArray;
    console.log(bat); // "3"
    

    您还可以将数组元素的“其余”部分分配给变量:

    const [first, ...rest] = myArray;
    console.log(rest); // "[2,3,4,5]"
    

    这只是冰山一角!查看我链接的文章以获得完整的图片。

        2
  •  3
  •   developer_hatch    6 年前

    这是摧毁一个物体的方法,所以这和

    let next = observer.next
    let error    = observer.error
    

    您也可以使用如下列表进行此操作:

    let [x, y] = ['a', 'b']; // x = 'a', y = 'b'
    

    您可以重命名变量名,例如:

    let {length : len} = 'abc'; // len = 3
    

    还有很多例子 here

        3
  •  1
  •   Daniel    6 年前

    这是ES6破坏语法的一部分,但首先要知道的是什么是角度上的可观测?一个可观测的只是一个函数,它的一个特点是它接受一个 observer .

    什么是 观察者 ?安 观察者 是具有 next ,请 error complete 方法。

    所以想象一下 观察者 像这样的对象:

    var observer = {
      next: 'You can move on now',
      error: 'Sorry, you messed up',
      complete: 'All done!'
    };
    
    //var next = observer.next;
    // var error = observer.error;
    
    const { next, error } = observer;
    next;
    error;
    

    所以ES5版本是注释掉的,它下面的ES6 100%等同于上面的版本和它的另一个版本。 const { next, error } = observer; 你在角度文件中看到的。

    这是一种从中获得所需财产的方法。 观察者 对象,在本例中, 下一个 错误 回调只在用户订阅时传递它们。实际上,它们是更多的方法,而不是其中的属性 观察者 对象,但是为了把课程带回家,我要保持它的属性简单。

    所以他们也可以 const { next, error, complete } = observer 但显然他们不需要 完成 方法。因此,为了避免重复的代码和从对象中提取属性或方法,这些行是按照您在文档中看到的方式组合的,如果需要调用这些属性,可以这样做:

    const { next, error } = observer;
    next;
    error;
    

    无需使用ES5点符号。

    如果你想把其他东西 下一个 ,请 错误 完成 由于这些属性或 观察者 ,方法,不存在于 观察者 对象。