在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ A、B兩個(gè)操作在需要等一個(gè)異步操作完成后操作

A、B兩個(gè)操作在需要等一個(gè)異步操作完成后操作

A、B兩個(gè)操作在需要等一個(gè)網(wǎng)絡(luò)請求完成后操作,但是可能是A,也可能是B,還可能是AB或者BA,AB兩個(gè)操作在不同的js文件中。
對于這種情況大家一般怎么處理的呢?謝謝了!
ps:請求在微信小程序中,無法添加async: false屬性


先謝謝大家的回答了,我之前也是想過promise的。但是這個(gè)網(wǎng)絡(luò)請求是在app()里面的。

clipboard.png

這里怎么使用promise就覺得有點(diǎn)沒有頭緒。

回答
編輯回答
淺淺

let in=false
A(){

C()

}
B(){

C()

}
C(){

if(in){
    return
}
in = true

}
其實(shí)我也是瞎寫的

2017年3月31日 06:56
編輯回答
硬扛

Promise.all 應(yīng)該可以

2017年9月3日 08:10
編輯回答
哚蕾咪

回調(diào)中根據(jù)需要調(diào)用不行嗎 ?

2018年8月2日 10:46
編輯回答
維他命

用Promise并行吧,幾個(gè)異步事件一起執(zhí)行,一起拿到結(jié)果,最后完成那個(gè)完成了,才獲取所有的異步返回值(集合)

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);
})

你如果是只要有請求完成就行,那么用競速,最先完成的完成了就執(zhí)行,返回最先完成的那個(gè)異步的值

Promise.race([a(),b(),c()]).then(function(val){
        console.log(val);
})
2018年4月19日 09:39
編輯回答
抱緊我

簡單粗暴:監(jiān)聽一段時(shí)間(自定義,如20秒)

//兩個(gè)請求是否完成的狀態(tài),在每個(gè)請求里面回填這個(gè)狀態(tài),改成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);
    //都完成時(shí)
    if (isComplete) {
        console.log("isComplete TODO");

    }
}, 1000);

//直接拷貝到控制臺(tái)執(zhí)行,能看效果,運(yùn)行的過程中,嘗試改變result對象兩個(gè)屬性的值

2017年6月25日 17:46
編輯回答
厭遇

這個(gè)確實(shí)是小程序的一個(gè)頭疼問題,沒有事件監(jiān)聽,異步數(shù)據(jù)處理很麻煩
當(dāng)時(shí)我是用定時(shí)器每隔200MS 限制次數(shù)去監(jiān)測的(這個(gè)方法很不愿意用,畢竟定時(shí)器很坑)

let count = 0
let timer = setInterval(function () {
  if(app.globalData.wxLogin){
    count++
    if (app.globalData.token) {
      clearInterval(timer)
      that.getCard()
    } else if (count > 15) {
      clearInterval(timer)
      util.wxShowModal(wx, that.getCard)
      //這里的目的是做出一個(gè)彈出層讓用戶主動(dòng)去獲取
    }
  } else if (app.globalData.wxLogin===false){
    clearInterval(timer)
  }
}, 200)
大概就是這樣紫,如果有更好的方法歡迎補(bǔ)充
還有就是寫成一個(gè)公共函數(shù),放到每個(gè)page里面調(diào)用,把異步信息存到全局 調(diào)用前判斷是否有信息。(這樣確實(shí)可以避免使用定時(shí)器監(jiān)測)
2018年8月28日 08:58