Javascript 如何在流中解析承诺?
我有一个highland流,其中每个元素都是get请求的承诺:Javascript 如何在流中解析承诺?,javascript,stream,promise,highland.js,Javascript,Stream,Promise,Highland.js,我有一个highland流,其中每个元素都是get请求的承诺: const stream = _[promise1, promise2, promise3, ...]; 当然,当我跑步时: const stream.each(console.log) 我只看到: Promise { <pending> } Promise { <pending> } Promise { <pending> } 如何在stream中解决承诺问题?我偶然发现了一个github
const stream = _[promise1, promise2, promise3, ...];
当然,当我跑步时:
const stream.each(console.log)
我只看到:
Promise { <pending> }
Promise { <pending> }
Promise { <pending> }
如何在stream中解决承诺问题?我偶然发现了一个github问题,这启发了我: 我们必须在Highland内部包装承诺,以便flatMap按预期工作:
stream.flatMap((id: number) => {
return Highland(myAsyncGetRequest(id));
}).each(console.log)
这条线索也揭示了为什么承诺没有被期待
措辞如下:
高地不是一个承诺图书馆。它可以消耗承诺,就像它可以
使用数组、回调和事件发射器,但其API是集中的
围绕转换流式价值观,而不是承诺。这就像是在问
为什么Array.prototype.map不等待承诺,或者为什么蓝鸟
不等待流
或如以下所述:
Highland streams已经代表了未来的值数组,因此
将承诺视为特别的东西是没有意义的
Highland不太适合你的需要,尽管我认为这是可能的 看一看,它是一个构建在标准节点流(如Highland)之上的框架,但它基于在异步情况下以与同步情况完全相同的方式工作的承诺 以下是您在超燃冲压发动机中如何兑现承诺:
const scramjet = require("scramjet");
const stream = scramjet.DataStream.fromArray([d1, d2, d3])
.map((data) => aCallThatReturnsAPromise(data))
.stringify((resolved) => JSON.stringify(resolved) + "\n")
.pipe(fs.createWriteStream('./yourfile.jslines');
由于Highland和超燃冲压发动机都在节点流的顶部工作,如果您愿意,您可以轻松地通过管道连接到以前的管道。而且它没有依赖性,因此您不会使软件重量增加一倍。:) 这似乎有关联reahttp://stackoverflow.com/questions/25638527/using-highland-js-to-perform-async-tasks-in-series-with-references-to-original-s
const scramjet = require("scramjet");
const stream = scramjet.DataStream.fromArray([d1, d2, d3])
.map((data) => aCallThatReturnsAPromise(data))
.stringify((resolved) => JSON.stringify(resolved) + "\n")
.pipe(fs.createWriteStream('./yourfile.jslines');