我有一个这样的数组: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
循环。
添加回答
举报
0/150
提交
取消