代码之家  ›  专栏  ›  技术社区  ›  Clone

使用Promise提交带有submit()的表单

  •  3
  • Clone  · 技术社区  · 8 年前

    我正在尝试按照特定的顺序写一些东西,可以做到以下几点:(1)提交表格(2)打印“打印我”(3) 等待3秒钟(4)打印“也打印我”

    为什么我的代码不能做到这一点?

    function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms));}
    function submitForm() { return new Promise(resolve => document.getElementById('form').submit());}
    
    async function test() {
        wait submitForm();
        console.log("Print me.")
        wait sleep(3000);
        console.log("Print me too.")
    };
    
    test();
    <form id="form" type="hidden">
        <input value="" id="id" type="text">
        <input value="Submit" type="submit">
    </form>
    1 回复  |  直到 8 年前
        1
  •  2
  •   soywod Ronnie Smith    8 年前

    这里有两个问题:

    • 我想你是想说 await 而不是 wait ?
    • 在里面 submitForm 你的 resolve 函数从未调用,请参见下面的更正

    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms))
    }
    
    function submitForm() {
      return Promise.resolve(() => document.getElementById('form').submit())
    }
    
    async function test() {
        await submitForm();
        console.log("Print me.")
    
        await sleep(3000);
        console.log("Print me too.")
    }
    
    test()
    <form id="form" type="hidden">
        <input value="" id="id" type="text">
        <input value="Submit" type="submit">
    </form>