亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數組 forEach 循環中的承諾

數組 forEach 循環中的承諾

冉冉說 2023-04-14 14:49:42
我有一個這樣的數組:var ids = [8372839402, 8392615782, 3677281302];插入的是 id 值?;谶@個 ID,我必須從數據庫中為每個 ID 獲取一些信息?;旧衔彝ㄟ^使用位于 db.js 中的以下函數獲取數據:function getdata(get_command) {  var request = new XMLHttpRequest();  var params = params + 'command=' + encodeURIComponent(get_command) + '&';  console.log(params);  currentpromise = new Promise(function(resolve, reject) {    request.open('POST', './php/get_data.php', true);    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");    request.onreadystatechange = function() {      if (request.readyState === XMLHttpRequest.DONE) {        if (request.status === 200) {          var response = JSON.parse(request.response);          resolve(response);        }        else {          resolve({error: 'Cant connect!'});        }      }    };    request.send(params);  });}      而不是在我的 main.js 中,我像這樣使用這個函數:var user_id = 'r82h9hfew89hf9983f8d9';var currentpromise;var obj = getdata('SELECT username, email FROM users WHERE id=' + user_id);      currentpromise.then(function(obj) {        if (obj.data[0] == 'false') {        }        else {           //succesfully go on        }      });     但是當我在數組中使用它時它不會工作。從那開始,我在 var currentpromise 上有多個承諾,或者每次在數組 forEach 中調用 getdata 函數來覆蓋它們。如何解決我的問題以無錯誤地循環遍歷數組?ids.forEach(function(id) {    var obj = getdata('SELECT name FROM data WHERE id=' + id);      currentpromise.then(function(obj) {        if (obj.data[0] == 'false') {        }        else {           //succesfully do next step           var obj = getdata('SELECT version FROM vers WHERE name=' + obj.data[0]['name']);           currentpromise.then(function(obj) {             if (obj.data[0] == 'false') {             }             else {               //succesfully finished with one id             }           });          }      });  });    希望有人可以幫助我。提前致謝。
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

ForEach本質上是同步的,你不應該在forEach循環中使用 promises 或任何異步代碼,因為它會簡單地遍歷數組而不等待 promise 得到實現。您可以改用for await...of循環。



查看完整回答
反對 回復 2023-04-14
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號