相关疑难解决方法(0)

Promises和Observables有什么区别?

有人可以解释Angular Promise和之间的区别Observable吗?

每个例子都有助于理解这两种情况.在什么情况下我们可以使用每个案例?

promise rxjs angular-promise angular angular-observable

1291
推荐指数
26
解决办法
42万
查看次数

JavaScript-我们应该使用Observables吗?还是承诺就足够了?

我很熟悉JavaScript的Promises。我知道今天的Promises是JavaScript语言的一部分-自ES6起,但是很久以前,那里(现在仍然是)一些实现它们的不同库。

我最近开始从事一些Angular项目,并向我介绍了Observables的概念(由RxJs提出)。
经过一番入侵之后,我了解了Observable和Promise之间的基本区别:

可观察的

  • 将0传递到N个事件。每个事件都可以调用回调。
  • 可观察的是可取消的
  • 他们有很多不同的方法(通过RxJs团队实施),可以帮助我阅读和分析类的数据:mapreduceretry等等。
  • 仅当有人订阅了Observables块时,才会触发它(否则将不会发生任何事情)

承诺

  • 处理单个事件,该事件将调用成功回调或失败回调。
  • ES6承诺不可取消(至少目前为止)。但是,不同的自由主义者已经实现了可撤销的承诺,例如BlueBird
  • 无论有人是否订阅(使用thencatch),都会触发Promises阻止。

我的问题不是它们之间有什么区别,但是我们是否实际需要Observables,或者它们仅仅是语法糖?由于Promises的使用是为了同步(按顺序设置)异步流,因此通过告诉一个代码块仅在另一个代码块完成时才运行,才可以运行它。

  1. 我们是否真的关心处理乘法事件,因为几乎总是我们想对某些流的成功或失败(例如服务器请求)作出反应。
  2. 用于处理Observable的RxJs方法(辅助函数)很酷,但并没有真正意义,因为您可以针对该行为使用第3方库(例如,debounce可以使用Lodash _.debounce和Promise 来代替RxJs )。当然,每个第3方库都具有附加的复杂性-RxJ也是如此。
  3. 只有在订阅后才触发可观察对象-这不是很重要-如果没人在听(订阅)它们,为什么我们要有一个可观察对象?

PS:
请不要阅读此问题,并认为我有个人代理人可观察的东西,我只是想了解他们在哪里最闪亮?在某些情况下,如果有的话,它们比“承诺”优越?

javascript observable rxjs es6-promise angular

5
推荐指数
1
解决办法
985
查看次数

打字稿中的顺序承诺

我有一个带有 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)

这是一个有效的解决方案,还是有更好的方法?

promise async-await typescript

2
推荐指数
1
解决办法
467
查看次数