相关疑难解决方法(0)

什么是"回调地狱"以及RX解决它的方式和原因?

有人可以给出一个明确的定义以及一个简单的例子来解释什么是不知道JavaScript和node.js的人的"回调地狱"?

何时(在什么样的设置中)出现"回调地狱问题"?

它为什么会发生?

"回调地狱"总是与异步计算有关吗?

或者也可以在单线程应用程序中发生"回调地狱"?

我参加了Coursera的Reactive课程,Erik Meijer在他的一个讲座中说RX解决了"回调地狱"的问题.我问在Coursera论坛上什么是"回调地狱",但我没有得到明确答案.

在一个简单的例子中解释"回调地狱"之后,你能否展示RX如何在这个简单的例子中解决"回调地狱问题"?

javascript callback reactive-programming language-lawyer rxjs

100
推荐指数
4
解决办法
6万
查看次数

RxJS承诺组合(传递数据)

我是Rx的新手,我发现很难找到有关组成承诺的文档,以便第一个承诺的数据传递到第二个承诺,依此类推.这是三个非常基本的承诺,对数据的计算并不重要,只是必须使用先前承诺的数据来完成异步.

 const p1 = () => Promise.resolve(1);
 const p2 = x => { const val = x + 1; return Promise.resolve(val); };
 const p3 = x => {
      const isEven = x => x % 2 === 0;
      return Promise.resolve(isEven(x));
 };
Run Code Online (Sandbox Code Playgroud)

实现我正在谈论的构图的传统方式:

 pl().then(p2).then(p3).then(console.log);
Run Code Online (Sandbox Code Playgroud)

我最喜欢的实现是Ramda的composeP和pipeP:

R.pipeP(p1, p2, p3, console.log)()
Run Code Online (Sandbox Code Playgroud)

似乎Rx可能能够非常流利地处理这种情况.但是,到目前为止我发现的最接近的是从RxJS到async(库)比较,这里https://github.com/Reactive-Extensions/RxJS/blob/master/doc/mapping/async/comparing.md:

 var Rx = require('rx'),
     fs = require('fs'),
     path = require('path');
 var file = path.join(__dirname, 'file.txt'),
     dest = path.join(__dirname, 'file1.txt'),
     exists = Rx.Observable.fromCallback(fs.exists),
     rename = Rx.Observable.fromNodeCallback(fs.rename),
     stat = Rx.Observable.fromNodeCallback(fs.stat);
 exists(file) …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming frp rxjs ramda.js

16
推荐指数
1
解决办法
3万
查看次数

RxJS:结束三个承诺,区分结果

我有三个承诺,Rest请求返回数据列表.
第三个对前两个列表有引用(ids),所以我想在拥有所有数据时将这些id映射到相应的名称.
映射不是问题,我只是使用Lodash.
但问题是在开始计算这个映射之前等待三个promises解决.

我想出来使用concat():

Rx.Observable.concat(p1, p2, p3).subscribe(
function onNext(list)
{
  // Assign the list to the corresponding variable in the scope
},
function onError(e)
{
  // Notify of error
},
function onCompleted()
{
  // Do the mapping
}
);
Run Code Online (Sandbox Code Playgroud)

我的问题是onNext()将以随机顺序调用.IE浏览器.我不知道在某些时候我收到了哪个列表,并且很难从它包含的数据中分辨出来.

有没有办法跟踪哪些承诺产生哪个列表?拉链?concatMap?concatMapObserver?我承认我还没有完全理解最后两个的用法......

javascript promise rxjs

8
推荐指数
2
解决办法
9655
查看次数