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

将ASYNC JavaScript函数作为参数传递

  •  0
  • Rilcon42  · 技术社区  · 3 年前

    我试图传递一个异步JS函数作为函数参数,但我一直得到一个未定义的响应。我在中找到代码 another SO answer 它在不使用async/await时有效,但当我试图修改它以允许async/await时,我不会返回嵌套函数结果“5”。为什么会发生这种情况,我该如何解决?

    代码示例(预期结果打印“5”)

    async function foo(x) {
        //sleep 5 sec
        new Promise((resolve) => setTimeout(resolve, 5000));
        console.log(x);
        return 5
     }
    
    async function bar(func) {
        console.log(1)
        return await func();
        console.log(2)
     }
    
    (async()=>{
        //alerts "Hello World!" (from within bar AFTER being passed)
        let keys=await bar(async function(){ await foo("Hello World!") });
    
        console.log(`result:`,keys)
    
    })()
    1 回复  |  直到 3 年前
        1
  •  1
  •   epascarello    3 年前

    您缺少 await 如果你想让它等5秒钟,就在睡眠中。您在传递的函数中没有返回,因此该函数返回未定义的值。

    async function foo(x) {
        //sleep 5 sec
        await new Promise((resolve) => setTimeout(resolve, 5000));
        console.log(x);
        return 5
     }
    
    async function bar(func) {
        console.log(1)
        return await func();
        console.log(2)
     }
    
    (async()=>{
        let keys=await bar(async function(){ return await foo("Hello World!") });
        console.log(`result:`,keys)
    })()