WebView 竟然貌似不支持 js async 函数? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
purenothingform
V2EX    Android

WebView 竟然貌似不支持 js async 函数?

  •  
  •   purenothingform 2023-12-31 20:17:01 +08:00 via Android 11970 次点击
    这是一个创建于 731 天前的主题,其中的信息可能已经有所发展或是发生改变。

    webview 版本 120.0.6099.43 实测 async 函数不执行

    12 条回复    2024-01-01 16:38:21 +08:00
    iOCZS
        1
    iOCZS  
       2023-12-31 20:56:56 +08:00
    看看代码,async 是 ES2017 引入的特性
    Vegetable
        2
    Vegetable  
       2023-12-31 21:26:43 +08:00
    https://caniuse.com/?search=async

    理论上安卓 5 以上应该就是 chrome 了,你的实测有问题
    purenothingform
        3
    purenothingform  
    OP
       2023-12-31 23:35:04 +08:00
    @iOCZS
    ```
    async function waitUntilPresent(v){
    return new Promise((resolve, reject) => {
    const loop = () => v !== undefined ? resolve(v) : setTimeout(loop)
    loop();
    });
    }
    waitUnitPresent(window.main).then((main) => {
    }, reason => {

    });
    ```可能是 window.main 迟迟没有被赋值导致死循环
    lisongeee
        4
    lisongeee  
       2024-01-01 00:56:18 +08:00   2
    你这代码都是错的

    waitUntilPresent 作用域下的参数 v 从你传入的时候就是一个 undefined 常量,根本无法检测 window.main 的引用变化

    下面这个才对

    ![image]( https://github.com/gkd-kit/gkd/assets/38517192/f932346b-9533-4c56-b737-2df30c6a06f8)
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       2024-01-01 00:59:02 +08:00
    真不支持就直接报错了,你找个熟悉 js 的同事请教请教吧
    okakuyang
        6
    okakuyang  
       2024-01-01 01:14:28 +08:00
    大乌龙
    zjp
        7
    /div> zjp  
       2024-01-01 01:23:55 +08:00
    看发帖记录,遇到 bug 先检查下自己代码吧
    CLMan
        8
    CLMan  
       2024-01-01 01:55:48 +08:00   1
    promise 是 es6 加的底层 API ,async 是 es8 加的语法糖。

    promise 不应该在 aysnc 函数里面使用,async 返回值会自动包装为 Promise 。

    promise 的问题是不够直观,写起来心智负担较大,能用 async 和 await 就尽量别用 promise 。

    ```
    function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
    }

    async function waitUntilPresent(w, callback) {
    while (w.main === undefined) {
    console.log("sleep");
    await sleep(100);
    }
    callback(w.main);
    }

    setTimeout(()=>{
    window.main = "hello";
    },1000);

    await waitUntilPresent(window, main => {
    console.log(main);
    });
    ```
    CLMan
        9
    CLMan  
       2024-01-01 01:59:54 +08:00
    @CLMan 看了下,4 楼的代码写的比我好。
    CLMan
        10
    CLMan  
       2024-01-01 02:26:02 +08:00
    @CLMan 更正,“promise 不应该在 aysnc 函数里面使用”是错误的,应该是 async 函数不需要手动返回 promise 。

    看了下 4 楼代码,确实学到了许多,特别是 promise 和 async 函数之间的关系。很多场合,async 函数还是没法替代 promise ,需要手撸 promise 。
    purenothingform
        11
    purenothingform  
    OP
       2024-01-01 11:42:03 +08:00 via Android
    @zjp 嘿嘿好的
    purenothingform
        12
    purenothingform  
    OP
       2024-01-01 16:38:21 +08:00
    @CLMan 为了兼容油猴插件用了以下错误写法导致的 bug
    ```
    typeof(unsafeWindow)==='undefined'?window.main:unsafeWindow.main=function() {//do something}
    ```
    关于     帮助文档     自助推广系统   nbsp; 博客     API     FAQ     Solana     2331 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:40 PVG 18:40 LAX 02:40 JFK 05:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86