有人可以解释Angular Promise和之间的区别Observable吗?
每个例子都有助于理解这两种情况.在什么情况下我们可以使用每个案例?
我很熟悉JavaScript的Promises。我知道今天的Promises是JavaScript语言的一部分-自ES6起,但是很久以前,那里(现在仍然是)一些实现它们的不同库。
我最近开始从事一些Angular项目,并向我介绍了Observables的概念(由RxJs提出)。
经过一番入侵之后,我了解了Observable和Promise之间的基本区别:
map,reduce,retry等等。then或catch),都会触发Promises阻止。我的问题不是它们之间有什么区别,但是我们是否实际需要Observables,或者它们仅仅是语法糖?由于Promises的使用是为了同步(按顺序设置)异步流,因此通过告诉一个代码块仅在另一个代码块完成时才运行,才可以运行它。
debounce可以使用Lodash _.debounce和Promise 来代替RxJs )。当然,每个第3方库都具有附加的复杂性-RxJ也是如此。PS:
请不要阅读此问题,并认为我有个人代理人可观察的东西,我只是想了解他们在哪里最闪亮?在某些情况下,如果有的话,它们比“承诺”优越?
我有一个带有 save 方法的打字稿类,我希望下一次调用 save 方法仅在第一个调用完成后才会发生。想象一下以下情况:
count = 0;
async save() {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下 - 当用户调用保存时,无需等待 - 第二个帖子可以在第一个帖子完成之前调用 - 导致各种问题。
我想出的解决方案是:
lastSave = Promise.resolve();
count = 0;
async save() {
this.lastSave = this.lastSave.then(async () => {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
});
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的解决方案,还是有更好的方法?
angular ×2
promise ×2
rxjs ×2
async-await ×1
es6-promise ×1
javascript ×1
observable ×1
typescript ×1