js同步异步问题,怎么调用带callback函数的时候改成同步

发布于 2022-09-05 07:31:26 字数 427 浏览 51 评论 0

var doExe = function (a , callback) {
    setTimeout(function () {
        console.log(a)
        if(callback) callback
    }, 100 * Math.random())
}
var aTest = function (num) {
    for(var i=0 ; i<num ; i++){
          doExe(i)
    }
}

aTest(10)

不知道有没有记错题目。。。。。。。
doExe是带个callback的函数, 现在aTest执行出来的顺序是乱的,要求按顺序输出0123456789

doExe不能改, aTest可以随便改。。。。求大神指点,闭包也行,队列+apply也行,实在没搞懂。。。。。

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

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

发布评论

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

评论(9

少跟Wǒ拽 2022-09-12 07:31:26

很简单,你如果不追求代码的美观性和可读性的话,直接把接下来要执行的代码写在回调函数里就好了,一层一层嵌套下去,祝福你~


开个玩笑
Promise:https://segmentfault.com/a/11...
Async/Await:https://segmentfault.com/a/11...
看完这两个希望你能写出自己的异步解决方案~

场罚期间 2022-09-12 07:31:26

var doExe = function (a , callback) {

setTimeout(function () {
    console.log(a)
    if(callback) callback()
}, 100 * Math.random())

}
var i = 0;
var aTest = function () {

if(i < 10) {
    doExe(i, aTest)
    i++;
}

}
aTest()

夜唯美灬不弃 2022-09-12 07:31:26

你需要async
nodejs之async异步编程 - CNode技术社区 http://cnodejs.org/topic/54ac...

╰つ倒转 2022-09-12 07:31:26

不是很明白出题人的用意,如果只是想要输出0123456789,而又不改变doExe函数,那就在callback上动动手脚好了。

var doExe = function (a, callback) {
    setTimeout(function () {
        console.log(a);
        if (callback) 
            callback
    }, 100 * Math.random())
}

doExe(9, (() => {
    for (let i = 0; i < 8; i++) {
        console.log(i);
    }
})());
巡山小妖精 2022-09-12 07:31:26

题目callback这个地方你记得就是这样的吗?

if (callback) 
    callback

我加了个括号:

var doExe = function (a, callback) {
    setTimeout(function () {
        console.log(a)
        if (callback) {
            callback()
        }
    }, 100 * Math.random())
}
var max = 9
var aTest = function (index) {
    doExe(index, () => {
        index < max && aTest(++index)
    })
}
aTest(0)
十年九夏 2022-09-12 07:31:26

亲们,此题重点应该在于200*Math.random啊。
因为不知道何时会下个setTimeout调用,所以必须保证settimeout每次调用后a的值都必须是递增的,所以传入doExe的a值就必须是相对他来说的全局变量了。
看效果(电脑没网,只能拍图用手机上传了,等有空了上传代码)
Image

悟红尘 2022-09-12 07:31:26

既然aTest 可以随便改。。。。那。。方法体内不一定要调用doExe吧。。。O(∩_∩)O哈!

韵柒 2022-09-12 07:31:26
var aTest=function(num){
    var current=0;
    function callback(){
        if(current<num){
            doExe(current++,callback);
        }
    }
}

试试这种

梦与时光遇 2022-09-12 07:31:26

同求问题,赞一个

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