javascript - 为什么等待延迟在函数作用域结束时结束

标签 javascript async-await

背景

我正在探索 Async/Await 语法,我认为我有一个聪明的方法来等待构建的 CSS 转换。但它不起作用,我不明白为什么。

代码

const setStyleAndWait = async function( el, property, value ) {

    var setTheStyle = (el, property, value) =>
        new Promise(resolve => {
            el.style[property] = value;
            const transitionEnded = e => {
                if (e.propertyName !== property) return;
                el.removeEventListener('transitionend', transitionEnded);
                resolve();
            }
            el.addEventListener('transitionend', transitionEnded);
        });

    await setTheStyle( this, property, value );

    console.log('Run logic inside await\'s parent scope');

};

setStyleAndWait( element, 'opacity', '0' ); // element is a reference to an element with a transition on for it's opacity style
console.log('Run logic outside await\'s parent scope.)

问题

当我运行它时,外部 console.log 立即运行,而内部则等待直到 promise 得到解决。为什么外部逻辑不等待函数完成?

最佳答案

setStyleAndWait 函数是异步的,不会等待,因此它会立即返回,导致外部日志首先完成。您可以将其重写为: setStyleAndWait(element, 'opacity', '0').then(() => console.log('完成后运行'))

或者将整个事情包装在异步函数中,以便您可以使用await

关于javascript - 为什么等待延迟在函数作用域结束时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779904/

相关文章:

Javascript - 如何删除具有特定 ID 的所有项目及其关联项目?然后是它的关联项及其后续项(递归?)

typescript - 为什么 typescript 'async' 方法在第一次 'await' 出现之前就像同步一样

javascript - R 中的 MVC 模式

javascript - 这个奇怪的 "script"在做什么?

javascript - 在第一个文本框中输入时,在第二个文本框中获取 mysql 数据

javascript - 将 href 与 ng-click 结合使用

c# - 嵌套 Async Await 不等待

javascript - 在 React 功能组件中使用 async/await

c# - 避免异步在方法签名中传播

c# - 调试器不会因异步方法中的异常而中断/停止