js中无法实现函数f1()运行完成后再运行f2()

我想实现函数f1()运行完成后,再运行f2(),因为小程序有时不是顺序执行的,所以我参照网上的用下面方法,可是 却还是不能实现,请问应该如何修改代码才能实现等f1()执行完后再执行f2()呢,请教各位!
async f2(){
try{
await f1()
}
catch(e){

 }

}

不是小程序不按照顺序,是应为你的f1使用了异步执行的方法,如setTime,setInterval或者wx.request之类,这样是不会等待异步执行完毕后再执行f2,按照顺序执行,用下面2种方法中其中一种来解决
可以用Promise,代码如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~


    function f1() {
        console.log('进入f1,里面包含异步方法')
        return new Promise(function (resolve, reject) {//异步代码放到Promise中
            setTimeout(function () {//setTimeout模拟异步方法
                console.log('异步执行完毕')

                resolve('ok');//执行成功调用resolve,会执行then回调
                //执行异步失败调用reject,会执行Promise catch回调
                //reject('执行失败')


            }, 3000) })

    }
    function f2(f1result) {
        console.log(f1result, '执行f2')//ok 执行f2
    }
    f1().then(f2).catch(function (err) { console.log('f1执行失败:' + err) });

第一次接触Promise不好理解就用平时常用的回调形式,把f2当参数传入f1,f1异步执行完毕后执行f2

    function f1(callback) {
        console.log('进入f1,里面包含异步方法')
        setTimeout(function () {//setTimeout模拟异步方法
            console.log('异步执行完毕');
            callback('执行回调');
        }, 3000);

    }
    function f2(f1result) {
        console.log(f1result, '执行f2')//ok 执行f2
    }
    f1(f2)///

你可以给一个全局变量。
f1()完成之后给变量赋值为true;
然后f2()用setInterval一直监听这个变量是否为true;
是true就调用它。
然后清理setInterval

let finished = false;
f1(){
  //....
  finished = true;
}

var time = setInterval(function(){ if(finished){ clearInterval(time);  f2() } },1000)

或者用promise();
f1.then(()=>{ f2() })

async await 使用方法看一下这篇文章就懂了,如果有时间可以了解一下Promise
https://blog.csdn.net/Alice_czy/article/details/118759052 https://blog.csdn.net/Alice_czy/article/details/118759052

运行完f1()再运行f2()
在f1(){}里面调用f2()即可

不用定时器感觉更适合我这初学者理解呢,嘿嘿,又请教了来访客人身边的程序员,给了个没用定时器解决的嘞都挺好哈

img