JS中如何和让异步函数优先执行?

发布于 2022-09-04 18:02:54 字数 238 浏览 9 评论 0

代码如下:

function fun(){
    var flag = false;
    setTimeout(function(){
        flag = true;        
    },1000)
    return flag;
}

比方说我想让setTimeout这个异步函数执行完毕后再执行后面的return flag;,请问怎么实现呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

梦途 2022-09-11 18:02:54

“异步”,这个概念就是让某个函数先不要执行... 你所说的肯定没法直接实现。

如果你是要拿到异步结果的话,可以考虑回调函数,也可以考虑使用ES2016的async和await

歌入人心 2022-09-11 18:02:54

没办法。
如果要等 setTimeout 执行完再调用,只能用callback的方式

function fun(callback){
    var flag = false;
    setTimeout(function(){
        flag = true;        
        callback(flag);
    },1000);
    return flag;
};

function callbackFunction(flag){
    alert(flag);
}
fun(callbackFunction);
避讳 2022-09-11 18:02:54

异步同步的区别就在于异步不阻塞程序执行
你提的问题违背了异步本身的意义,考虑异步+回调实现你要的功能
异步使用同步的写法在ES6中async/await有实现

本质上是实现一个迭代器,执行到await的时候暂停了,直到这一个Promise resolve后才会自动调用.next()继续执行。


你要的功能可以这样实现:

function func(ifSleeped){
    if(!ifSleeped) {
        var flag = false;
        setTimeout(function() { func.call(this,true); },1000);
    } else {
        return flag;
    }
}
// 编译器会报错,没有在所有的条件判断中返回值,函数可能返回空值
兮颜 2022-09-11 18:02:54

1.可以定义个戳判断

if(flag == true){
 return flag
}

2.利用异步方案(promise,generator,async)

var p = new Promise(function (resolve, reject) {
    setTimeout(function(){
        flag = true;
        resolve(flag)
    },1000)
})

p.then(function(flag){
  // 处理flag
})
友欢 2022-09-11 18:02:54

因为异步函数不知道什么时候结束,所以不能用return,只能在异步函数外面套一个函数形参为callback获得异步函数中执行的结果。举个简单的例子:

//这是一个异步方法
function fun(callback){
    setTimeout(function(){
        var a = 1;
        a++;
        callback(a);    //a作为实参传入回调函数
        console.log("我是异步函数,我执行完毕了!");
    },500)
}
fun(function(b){    //b作为形参,接收fun方法中传入的变量a
    console.log(b);
})
凉宸 2022-09-11 18:02:54

把return flag放到flag = true下面。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文