关于replace async问题求助
本帖最后由 bigonion 于 2023-6-11 16:22 编辑> 本帖最后由 bigonion 于 2023-6-11 13:20 编辑
# 关于replace async问题求助
首先以下用法是最常见的用法,输出是把所有的love换成2
```js
console.log("love + bad + kid + love".replace(/love/g,"2"))
//2 + bad + kid + 2
```
但是replace可以有第二个参数是函数
```js
const result ="love + bad + kid + love".replace(/love/g,(content)=>{
return content+1
})
console.log(result)
//love1 + bad + kid + love1
```
这样也是没问题的
```js
<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该怎么办?
```js
<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>
// + bad + kid +
```
我想用await接收就必须在函数前加上async 但是async 会让所有的返回值都包裹上promise,这就导致我所有的返回值都变成了` `
我也尝试过在里面使用then方法赋值给其他变量,但是实际发现没什么用,因为then是异步的,每一次匹配到执行函数的时候都会滑过then里面的赋值语句,实在是没办法了,来求助gg们呜呜呜呜😭😭😭
## 解决篇
感谢@道哥
有一个支持异步开发的replace库
[https://www.npmjs.com/package/string-replace-async](
https://www.npmjs.com/package/string-replace-async)
https://www.npmjs.com/package/string-replace-async
用个库咋样 麻烦的方式的话,自己实现replace了
或者先把这块要替换的字符替换成一个标志符,然后再处理一次 李恒道 发表于 2023-6-11 14:39
https://www.npmjs.com/package/string-replace-async
用个库咋样
妈的爱死道哥了 王一之 发表于 2023-6-11 16:01
麻烦的方式的话,自己实现replace了
或者先把这块要替换的字符替换成一个标志符,然后再处理一次 ...
道哥给的这个库完美解决了!
页:
[1]