本帖最后由 bigonion 于 2023-6-11 16:22 编辑
本帖最后由 bigonion 于 2023-6-11 13:20 编辑
关于replace async问题求助
首先以下用法是最常见的用法,输出是把所有的love换成2
console.log("love + bad + kid + love".replace(/love/g,"2"))
//2 + bad + kid + 2
但是replace可以有第二个参数是函数
const result ="love + bad + kid + love".replace(/love/g,(content)=>{
return content+1
})
console.log(result)
//love1 + bad + kid + love1
这样也是没问题的
<script type="module">
async function promise() {
return 2333;
}
const a = await promise();
const result = "love + bad + kid + love".replace(/love/g, (content) => {
return content+a;
});
console.log(result);
</script>
问题篇
问题出现在如果我想要在replace第二个参数,函数里接收外界返回的promise该怎么办?
<script type="module">
async function promise(content) {
return 2333+content;
}
const result = "love + bad + kid + love".replace(/love/g, async (content) => {
return content+await promise(content);
});
console.log(result);
</script>
//[object Promise] + bad + kid + [object Promise]
我想用await接收就必须在函数前加上async 但是async 会让所有的返回值都包裹上promise,这就导致我所有的返回值都变成了[object Promise]
我也尝试过在里面使用then方法赋值给其他变量,但是实际发现没什么用,因为then是异步的,每一次匹配到执行函数的时候都会滑过then里面的赋值语句,实在是没办法了,来求助gg们呜呜呜呜😭😭😭
解决篇
感谢@道哥
有一个支持异步开发的replace库
https://www.npmjs.com/package/string-replace-async