我正在尝试学习角Js和Angular 2。我想知道在Angular Js和Angular 2中使用Promise时的区别?任何人都可以解释。
答案 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箭头功能。