Angular JS与Angular 2的承诺

时间:2018-05-03 15:00:27

标签: angularjs angular

我正在尝试学习角Js和Angular 2。我想知道在Angular Js和Angular 2中使用Promise时的区别?任何人都可以解释。

2 个答案:

答案 0 :(得分:1)

Angular 2(+)通常使用Observables而不是Promises。类似,但Observables提供了更大的灵活性。您可以取消Observable并重试一个observable。

以下是使用Observable的一些示例代码:

  this.data = new Observable(observer => {
      setTimeout(() => {
          observer.next(42);
      }, 1000);

      setTimeout(() => {
          observer.next(43);
      }, 2000);

      setTimeout(() => {
          observer.complete();
      }, 3000);
  });

  let subscription = this.data.subscribe(
      value => this.values.push(value),
      error => this.anyErrors = true,
      () => this.finished = true
  );

在此示例中,在两个不同的场合向订阅发送一个号码。 42秒1秒,然后43秒秒。最后,在3秒钟,观察者完成。

订阅正在监听观察者,直到完成为止。在上面的例子中,每次观察者调用它的“下一个”函数时,订阅都会将数字推送到一个数组(this.values)。

答案 1 :(得分:0)

在Angular中,通常使用Observable,但有些东西仍然使用promises。您可以选择在任一框架中使用promises或observable。 AngularJS在$q服务中实现promise功能。 Angular没有自己的实现,但通常使用core-js的ES6兼容实现。语法不同,但相当直观。

在AnguarJS中创建新的承诺:

var deferred = $q.defer();

doSomethingAsynchronousThenCallBack(function(returnedValue) {
    deferred.resolve(returnedValue);
});

return deferred.promise;

在Angular中创建新的承诺:

var promise = new Promise(function(resolve, reject) {

    doSomethingAsynchronousThenCallBack(function(returnedValue) {
        resolve(returnedValue);
    });

});

return promise;

在任一框架中使用返回的promise:

doSomethingThatReturnsAPromise()
    .then(function() {
        doSomethingAfter();
    });

当然,如果您正在进行转换,则可以使用ES6箭头功能。