Javascript 可观察和承诺之间的差异
所以我已经阅读了关于可观测的内容,甚至在我创建的一个应用程序中使用了它。这就是我对可观测数据的理解——它是一个围绕着连续数据流的包装器,数据流可以是同步的,也可以是异步的,或者两者兼而有之。所以基本上它可以返回多个值。还有一个观察者与被观察者相关联(订阅)。每当可观察执行收到新值时,观察者就会收到它。所以我有两个问题-Javascript 可观察和承诺之间的差异,javascript,promise,observable,observers,Javascript,Promise,Observable,Observers,所以我已经阅读了关于可观测的内容,甚至在我创建的一个应用程序中使用了它。这就是我对可观测数据的理解——它是一个围绕着连续数据流的包装器,数据流可以是同步的,也可以是异步的,或者两者兼而有之。所以基本上它可以返回多个值。还有一个观察者与被观察者相关联(订阅)。每当可观察执行收到新值时,观察者就会收到它。所以我有两个问题- 如果您想返回多个值,为什么不为每个请求创建单独的承诺,并简单地将它们放在promise.all中,这样当所有请求都解决时,我们就得到了我们所需要的,而不是以可观察的方式发出多个请
提前谢谢。好的,我可能错了,但它们的用途完全不同。这就是我对它们之间区别的理解
- 主要区别在于,承诺只能解决一次,因此,即使您创建了新的承诺并将其推送到。那么,承诺的所有将只触发一次。即使阵列更改,它也不会再次解决
- Promise.all适用于固定长度的iterable,我们知道它有多大,而Observable适用于持续增长的iterable(溪流等)
var a = async(b + c);
var d = wait for a;
what is d?
在承诺知道d时,我们只需要b+c。我们知道它会发生,但只有我们不知道什么时候,所以我们只是等待。
它最终将(解决)的链中有多少并不重要。
即使是铁链
var a = async(b+c) + async (c+d)
var d = promise.all(a)
这是承诺。所有人都在等待一切,但在事情发生后(解决),再等待承诺是没有意义的。因为我们不在乎a会发生什么
var a = 1 + 1 for every second;
var d = a + 1;
what is d?
在这里,我们永远不会知道d的值是多少,它永远在变化。我们只能读取当前值(观察)a并给出当前值d
var a = 1 + 1 for every second;
var d = observe(a) + 1;
但是我们不能使用诺言。如果我们在这种情况下使用它
var a = 1 + 1 for every second;
var d = promise.all(a) + 1; //wont work
总是有变化的。所以我们必须永远等待。这就是承诺、一切和可观察之间的区别。
很抱歉发了这么长的帖子。谢谢Shyam的回复。我确实明白你所说的,一旦任何一个承诺有了解决(或拒绝)的价值,它就会回来,永远不会回去改变。因此,如果promise.all中有多个承诺,那么当所有承诺都解决时,将调用.then()。这就是为什么我在评论我们任务的用例(目的)时提出了第二点。我想我们可以这样总结:如果你在寻找一个连续的数据流,可以使用可观测数据和承诺。当你想在所有承诺解决后做某事时,可以使用所有承诺。