如何在javascript中同步运行异步函数?

时间:2019-11-08 07:01:27

标签: javascript async-await

  

注意:这可能不是重复的,因为我有很多不同的要求,而且我找不到解决方案。

这是场景:

我正在使用具有getSignature功能的自定义组件。

关于此功能:

  • 它必须是同步的,添加async关键字将不起作用。

  • 在安装组件时将自动调用此函数。

  • 此函数必须返回一些数据以备将来使用。

但是现在必须必须(从HTTP请求)同步生成签名,并且在实际安装此组件之前不能生成签名。

这是简化的代码:

class Showcase extends UniqueComponent {
    getSignature() {
        function runAsyncSynchronously(asyncFunc) {
            // Is this possible?
        }

        function getData() {
            return new Promise(resolve => {
                setTimeout(() => resolve(42), 3000);
            });
        }

        let data = runAsyncSynchronously(getData);
        return data;    // output "42" after 3 seconds
    }
}

是否有可能实现这一目标? 等待期间是否冻结整个过程都没关系。

我尝试过,但是它永远被卡住了...

function runAsyncSynchronously(asyncFunc) {
    let isDone = false;
    let result = null;
    asyncFunc().then(data => {
        isDone = true;
        result = data;
    });

    while (!isDone){

    }
    return result;
}

0 个答案:

没有答案