上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

关于replace async问题求助

[复制链接]
  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-6-11 13:13:32 | 显示全部楼层 | 阅读模式
    悬赏1油猫币未解决

    本帖最后由 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

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    638

    主题

    5234

    回帖

    6105

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6105

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-6-11 14:39:43 | 显示全部楼层
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    296

    主题

    3949

    回帖

    3858

    积分

    管理员

    积分
    3858

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-6-11 16:01:19 | 显示全部楼层
    麻烦的方式的话,自己实现replace了

    或者先把这块要替换的字符替换成一个标志符,然后再处理一次
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-6-11 16:21:49 | 显示全部楼层
    李恒道 发表于 2023-6-11 14:39
    https://www.npmjs.com/package/string-replace-async
    用个库咋样

    妈的爱死道哥了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-6-11 16:23:11 | 显示全部楼层
    王一之 发表于 2023-6-11 16:01
    麻烦的方式的话,自己实现replace了

    或者先把这块要替换的字符替换成一个标志符,然后再处理一次 ...

    道哥给的这个库完美解决了!
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表