为了账号安全,请及时绑定邮箱和手机立即绑定

A、B两个操作在需要等一个异步操作完成后操作

A、B两个操作在需要等一个异步操作完成后操作

杨__羊羊 2019-03-14 14:15:24
A、B两个操作在需要等一个网络请求完成后操作,但是可能是A,也可能是B,还可能是AB或者BA,AB两个操作在不同的js文件中。对于这种情况大家一般怎么处理的呢?谢谢了!ps:请求在微信小程序中,无法添加async: false属性先谢谢大家的回答了,我之前也是想过promise的。但是这个网络请求是在app()里面的。这里怎么使用promise就觉得有点没有头绪。
查看完整描述

5 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞


简单粗暴:监听一段时间(自定义,如20秒)


//两个请求是否完成的状态,在每个请求里面回填这个状态,改成1

var wait = 20, result = { ajax1: 0, ajax2: 0 };

var siFlag = setInterval(function () {

    wait--;

    if (wait < 1) {

        clearInterval(siFlag);

    }

    var isComplete = true;

    for (var i in result) {

        if (!result[i]) {

            isComplete = false;

            break;

        }

    }

    console.log(wait);

    //都完成时

    if (isComplete) {

        console.log("isComplete TODO");


    }

}, 1000);

//直接拷贝到控制台执行,能看效果,运行的过程中,尝试改变result对象两个属性的值


查看完整回答
反对 回复 2019-03-20
?
翻阅古今

TA贡献1780条经验 获得超5个赞

let in=false

A(){


C()

}

B(){


C()

}

C(){


if(in){

    return

}

in = true

}

其实我也是瞎写的


查看完整回答
反对 回复 2019-03-20
?
动漫人物

TA贡献1815条经验 获得超10个赞

Promise.all 应该可以


查看完整回答
反对 回复 2019-03-20
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

用Promise并行吧,几个异步事件一起执行,一起拿到结果,最后完成那个完成了,才获取所有的异步返回值(集合)


var a = function(){

    return new Promise(function(resolve, reject){

        setTimeout(function(){

            resolve('a');

        },2000);

    })

}

var b = function(){

    return new Promise(function(resolve, reject){

        setTimeout(function(){         

            resolve('b');

        },1000);

    })

}

var c = function(){

    return new Promise(function(resolve, reject){

        setTimeout(function(){

            resolve('c');

        },3000);

    })

}

Promise.all([a(),b(),c()]).then(function(val){

        console.log(val);

})

你如果是只要有请求完成就行,那么用竞速,最先完成的完成了就执行,返回最先完成的那个异步的值


Promise.race([a(),b(),c()]).then(function(val){

        console.log(val);

})


查看完整回答
反对 回复 2019-03-20
  • 5 回答
  • 0 关注
  • 698 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号