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

数组 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 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信