Javascript 在回调函数中将流转换为字符串以返回字符串

Javascript 在回调函数中将流转换为字符串以返回字符串,javascript,node.js,Javascript,Node.js,简而言之:我有一个回调函数,它有一个字符串参数,并且必须返回一个字符串。我需要使用仅适用于流的库来转换此字符串。我该怎么做 更长:我正在使用Node.js replacestream,它有一个与RegEx匹配的特性,就像String.replace一样,它允许指定。我需要做的是获取匹配的字符串,在另一个库中运行它,然后返回转换后的字符串进行替换 问题是这个库只适用于流。通常我可以使整个过程异步化,但我看不到任何使用String.replace回调的方法 src(['*.js']) .pipe(r

简而言之:我有一个回调函数,它有一个字符串参数,并且必须返回一个字符串。我需要使用仅适用于流的库来转换此字符串。我该怎么做

更长:我正在使用Node.js replacestream,它有一个与RegEx匹配的特性,就像String.replace一样,它允许指定。我需要做的是获取匹配的字符串,在另一个库中运行它,然后返回转换后的字符串进行替换

问题是这个库只适用于流。通常我可以使整个过程异步化,但我看不到任何使用String.replace回调的方法

src(['*.js'])
.pipe(replace(/`(.*?)`/gs, function(match, p1, offset, string) {
    var ostream = stringtostream(p1);
    ostream.pipe(glslminify());

    //???code that waits for ostream to finish and converts it to string???

    return string_from_ostream;
}))
.pipe(dest(jsdest));

一定有更好的方法可以做到这一点,所以我正在寻找任何建议。

您已经澄清了库使用流,更重要的是,它是异步工作的。这意味着您不能在
replace
回调中直接使用它来确定回调的返回值,因为这当然必须同步提供

相反,您可以做的是使函数异步,将字符串分为需要处理的部分和不需要处理的部分,触发需要处理的部分的异步处理,然后在这些部分完成后组装完成的字符串

下面是一个使用代理异步流程的示例,该流程通过承诺报告完成情况(您可以围绕流包装承诺,或者修改代码以使用流完成):

//处理字符串的函数
函数你的函数(str){
回报你的承诺(
str.split(/`(.**`/s).map((片段,索引)=>
//捕获组是奇数编号的索引
索引%2==1
?过程(片段)
:片段
)
)
.然后(segments=>segments.join(“”);
}
//图书馆里的承诺包装纸
功能过程(str){
返回新承诺((解决、拒绝)=>{
//通过计时器模拟;我不是在模拟失败,而是
//您可以通过调用“拒绝”来处理失败`
设置超时(()=>{
//成功
解析(str.toUpperCase());
},Math.random()*400);
});
}
//使用和不使用前导和尾随文本进行测试
yourFunction(`1233`测试`1234`)
。然后(结果=>{
控制台日志(结果);
返回函数(“前导文本`一两三`testing`两三四`”)
})
。然后(结果=>{
控制台日志(结果);
返回函数(“前导文本`一两三`testing`两三四`training text”)
})
。然后(结果=>{
控制台日志(结果);
})
.catch(错误=>{
//处理/报告错误

});此库:我正在查找。。。它由4个不同的子库组成,其中至少有2个有同步的方法,因此如果这4个子库都能同步,这将完全解决我的问题。不幸的是,这一个似乎是异步的:谢谢,让我尝试将其调整到我的特定情况,然后我将选中答案。