基于promise.all實現(xiàn)wx.request微信小程序同步請求

微信小程序的wx.request方法是異步的距淫,并且沒有像ajax一樣有個async的設置參數(shù)去設置同步執(zhí)行粗仓。
但是我這兒有個類似這樣的需求:

var postDataArr = ['aaa','bbb','ccc'];
var getEndData = [];
for(var i = 0;i<postDataArr .length;i++){
return new Promise(function (resolve, reject) {
  wx.request(
    ......
    success:function(res){
      getEndData.push(res);
    }
  )
})
}

return getEndData;//得到處理數(shù)據(jù)

wx.request作為異步請求方法雏吭,顯然我們拿到的getEndData依然是個空狡耻。

我的解決方式是用promise.all
promise的概念
promise的作用簡而言之就是Promise的它的多重鏈式調(diào)用草娜,可以避免層層嵌套回調(diào)挑胸。假設我們在第一次ajax請求后,還要用它返回的結(jié)果再次請求呢宰闰?promise就非常有用了茬贵。

function sendRequest(url, param) {
    return new Promise(function (resolve, reject) {
        request(url, param, resolve, reject);
    });
}

sendRequest('test1.html', '').then(function(data1) {
    console.log('第一次請求成功, 這是返回的數(shù)據(jù):', data1);
    return sendRequest('test2.html', data1);
}).then(function(data2) {
    console.log('第二次請求成功, 這是返回的數(shù)據(jù):', data2);
    return sendRequest('test3.html', data2);
}).then(function(data3) {
    console.log('第三次請求成功, 這是返回的數(shù)據(jù):', data3);
}).catch(function(error) {
    //用catch捕捉前面的錯誤
    console.log('sorry, 請求失敗了, 這是失敗信息:', error);
});

那我所請求的循環(huán)和這個有所不同,我不知道要then多少次移袍。
promise.all是怎么實現(xiàn)的呢解藻?
Promise.all(iterable)方法返回一個 Promise 實例,此實例在 iterable 參數(shù)內(nèi)所有的 promise 都“完成(resolved)”或參數(shù)中不包含 promise 時回調(diào)完成(resolve)葡盗;如果參數(shù)中 promise 有一個失斆蟆(rejected),此實例回調(diào)失斆俟弧(reject)胶背,失敗原因的是第一個失敗 promise 的結(jié)果。

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});

以下是我在實際項目引用中的代碼:

var PromiseAllArr  = [];//*********************用來存多個Promise
 for (var k = 0; k < detail_postData.initData.length; k++) {
      var v = detail_postData.initData[k];
      var data_ = {
        tran_no: v.tran_no,
        info_id: v.infoid
    };
      PromiseAllArr.push(
        new Promise(function (resolve, reject) {
          wx.request({
            url: common.BASE_URL + 'XXXXX',
            data: data_,
            method: 'post',
            dataType: 'json',
            header: {
              'access_token': AUTH_TOKEN,
              'user_key': USER_KEY
            },
            success: function (getinfo) {
               //如果返回數(shù)據(jù)是正確的
              if (getinfo.data.code == '1') {
                return resolve(getinfo);
              } else {
              //如果返回數(shù)據(jù)是錯誤的
                return reject(getinfo.data.msg);
              }
            },
            fail: function (error) {
              return error;
            },
            complete: function (complete) {

              return complete;
            }
          })
      })

      )
  //*********************Promise存好了喘先,現(xiàn)在來用
 Promise.all(PromiseAllArr).then(function (values) {
      console.log(values);
    }).catch(reason => {
      console.log(reason)
    });

當PromiseAllArr中的Promise請求錯誤钳吟,就會返回第一個報錯的Promise請求中的reject,返回到catch函數(shù)里.
當PromiseAllArr中的Promise全部請求成功窘拯,則會返回到then函數(shù)中红且,返回的是由各Promise請求成功返回的數(shù)組。

網(wǎng)上建議使用async-wait解決涤姊,
它的解決方法
它的解決原理
但是我用這個比較容易報錯暇番,還需要裝換es6到es5

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市思喊,隨后出現(xiàn)的幾起案子奔誓,更是在濱河造成了極大的恐慌,老刑警劉巖搔涝,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厨喂,死亡現(xiàn)場離奇詭異,居然都是意外死亡庄呈,警方通過查閱死者的電腦和手機蜕煌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诬留,“玉大人斜纪,你說我怎么就攤上這事贫母。” “怎么了盒刚?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵腺劣,是天一觀的道長。 經(jīng)常有香客問我因块,道長橘原,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任涡上,我火速辦了婚禮趾断,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吩愧。我一直安慰自己芋酌,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布雁佳。 她就那樣靜靜地躺著脐帝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糖权。 梳的紋絲不亂的頭發(fā)上堵腹,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音温兼,去河邊找鬼。 笑死武契,一個胖子當著我的面吹牛募判,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咒唆,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼届垫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了全释?” 一聲冷哼從身側(cè)響起装处,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浸船,沒想到半個月后妄迁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡李命,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年登淘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片封字。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔州,死狀恐怖耍鬓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情流妻,我是刑警寧澤牲蜀,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绅这,受9級特大地震影響涣达,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜君躺,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一峭判、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棕叫,春花似錦林螃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伏钠,卻和暖如春横漏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熟掂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工缎浇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赴肚。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓素跺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親誉券。 傳聞我的和親對象是個殘疾皇子指厌,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345