我将按照以下方式使用async/await函数
async function(){
let output = await string.replace(regex, async (match)=>{
let data = await someFunction(match)
console.log(data); //gives correct data
return data
})
return output;
}
但是返回的数据是一个promise对象,只是对在这样的带回调的函数中应该如何实现感到困惑。
7条答案
按热度按时间l0oc07j21#
一个易于使用和理解的异步替换函数:
它会执行两次替换功能,所以如果你要处理一些很重的东西,要小心。不过对于大多数用途来说,它还是很方便的。
像这样使用它:
或者这个:
不要忘记,您的
myAsyncFn
必须返回一个承诺。异步函数的示例:
imzjd6km2#
native
replace
method不处理异步回调,您不能将其与返回承诺的替换器一起使用。然而,我们可以编写自己的
replace
函数来处理承诺:xqnpmsa83#
因此,不存在需要承诺的replace重载,所以只需重新编写代码即可:
当然,如果需要使用match值传递给异步函数,事情会变得有点复杂:
avkwfej44#
以下是Overcl9ck’s answer的改进版和更现代的版本:
由于
String.prototype.matchAll
,这需要一个更新的浏览器基线,landed across the board in 2019(除了Edge,它在2020年初获得了基于Chromium的Edge).但它至少同样简单,同时也更高效,只在第一次通过时 * 匹配 *,而不是创建一个无用的字符串,并且不会以昂贵的方式改变替换数组.mznpcxlj5#
下面是使用递归函数的另一种方法:
1l5u6lss6#
还有另一个解决方案,这次使用TypeScript,与Maxime's solution类似,它避免了许多其他解决方案中“语义上不寻常”的初始
replace()
-调用,而是使用match()
。j9per5c47#
这是Overcl9ck在TS中实现的解决方案: