Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在流中解析承诺?_Javascript_Stream_Promise_Highland.js - Fatal编程技术网

Javascript 如何在流中解析承诺?

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

我有一个highland流,其中每个元素都是get请求的承诺:

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');