当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何才能让该函数变成一个同步的?

诸葛亮
2023-06-14
async function f1(){
    await setTimeout(()=>{
        console.log('2');
    },3000);
}
console.log('1');
f1();
console.log('3');

结果是:
1
3
2

明明我上面已经声明f1为同步的了,为何最后一个3不等f1函数执行完就跳出来了?
我想要得到的结果是:
1
2
3

共有4个答案

孟和怡
2023-06-14

首先你对 f1 函数的定义是有问题的,需要稍加修改,

function f1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('2');
            resolve();
        }, 3000)
    });
}

其次,调用异步函数并需要等待时需要添加 await 语法糖

(async () => {
    console.log('1');
    await f1();
    console.log('3');
})();
田志尚
2023-06-14
(async () => {
    function f1() {
        return new Promise(resolve => {
            setTimeout(() => {
                console.log("2");
                resolve();
            }, 3000);
        });
    }
    console.log('1');
    await f1();
    console.log('3');
})();
萧和平
2023-06-14
async function f1(){
    await new Promise((r)=>{
      setTimeout(()=>{
        console.log('2');
        r()
        },3000)
    });
}
;(async ()=>{
    console.log('1');
    await f1();
    console.log('3');
})()
段干玺
2023-06-14
function delay(interval) {
  return new Promise(resolve => setTimeout(resolve, interval));
}

async function f1(){
    await delay(3000);
    console.log('2');
}

console.log('1');
await f1();
console.log('3');

这样不仅清晰易读,也更加符合 异步编程范式

 类似资料:
  • 问题内容: 如果我需要一个接一个地调用此函数, 我知道在jQuery中我可以做类似的事情: 但是,假设我没有使用jQuery,而是要调用: 我应该如何调用此函数以便执行,然后在调用结束后执行,然后执行,然后在调用结束后再调用? 更新: 这仍然无法正常工作: 三个动画同时开始 我的错误在哪里? 问题答案: 在Javascript中,有 同步 和 异步 功能。 同步功能 Javascript中的大多数

  • 我是JavaScript和React的新手,我正试图远离教程,所以为了自己的学习利益,我开始制作一个简单的应用程序,但遇到了功能异步运行的障碍。 在中,有一个,其回调中包含以下内容: 如何使上述两个函数同步运行使用在中设置的,但下面的显示在完成之前启动。 我已经阅读了一些参考资料,其中提到使用promise,但我不知道如何应用它。。。我还想知道是否可以通过/实现。 完整(ish)代码:(为了简单起

  • 问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调

  • 有两个不同的字符串数组。 我想把这两个数组做成一个4*2矩阵。 我怎么做这个矩阵?

  • 我试图为从服务调用异步函数的函数编写测试,但我一辈子都不知道如何让Jasmine在执行expect函数之前等待异步操作完成。 我试图使用Jasmine的“完成”功能,但我不知道如何实现它。 在本例中,只要 调用时,它立即跳转到expect并失败,因为异步操作尚未完成。

  • 我有一个内部web应用程序,它有一个模态对话框。不幸的是,我不能在这里发布实际的web应用程序位置,但是让我尽可能地描述一下。 当应用程序启动时,屏幕上会出现一个框,告诉您一堆文本。您可以按“下一页”以获取下一页文本 在最后一页上,“下一步”按钮被禁用,web应用程序的其余UI被启用 页面数量不定,所以我不知道我必须点击“下一步”多少次 我可以点击固定的次数(例如,如果我知道有两个页面,我可以点击