javascript - while 循环的问题

标签 javascript node.js while-loop

我正在尝试将 while 循环与我的 util() 函数一起使用(它在代码底部被注释掉了)。当我尝试运行该程序时,我陷入了无限循环,我没有比控制台注销“getProjects running”更远

const axios = require("axios");
const _ = require("lodash");

axios.defaults.headers.common["Private-Token"] = "iTookMyPrivateKeyOut";
const user = "yshuman1";
let projectArray = [];
let reposExist = true;

async function getProjects() {
  console.log("getProjects running");
  await axios
    .get(`https://gitlab.com/api/v4/users/${user}/projects`)
    .then(function(response) {
      const arr = _.map(response.data, "id").forEach(repo => {
        projectArray.push(repo);
      });
      console.log(projectArray);
    });
}

function deleteRepo(projectArray) {
  console.log("array size", projectArray.length);
  const arr = _.map(projectArray).forEach(item => {
    axios
      .delete(`https://gitlab.com/api/v4/projects/${item}`)
      .then(() => {
        console.log("deleted project ID: ", item);
      })
      .catch(error => {
        console.log(error);
      });
  });
}

function util() {
  getProjects()
    .then(() => {
      if (projectArray.length == 0) {
        reposExist = false;
      }
      if (projectArray.length < 20) {
        console.log("array is less than 20");
        reposExist = false;
      }
      deleteRepo(projectArray);
    })
    .catch(error => {
      console.log(error);
    });
}

// while (reposExist) {
//   util();
// }

最佳答案

while 循环是同步的,而 .then(或 promise await)中的所有内容都是异步的。初始线程永远不会终止。您的代码只会对 getProjects 的无限制调用进行排队,这只会 console.log

简单的解决方案是弄清楚您希望多久调用一次 util(每秒一次?每 5 秒一次?)和 await Promise 在每次迭代的这段时间后解析。

let reposExist = true;
function util() {
  console.log('running');
}

const resolveAfter5 = () => new Promise(res => setTimeout(res, 5000));
(async () => {
  while (reposExist) {
    util();
    await resolveAfter5();
  }
})();

关于javascript - while 循环的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057231/

相关文章:

node.js - 如何防止 MongoDB 副本集查询主副本集?

c# - 我不明白在 C# 中使用 "while(true)"和 "for(; ;)"循环!

python - 如何在Python中将变量限制为零

javascript - 在谷歌地图中创建三 Angular 形

javascript - 如何从文本区域获取 HTML 代码,然后将其作为 setData 提供给 CKEDITOR?

javascript - 设置静态 Assets 路径,使用 koa 和各种中间件路由端点

c++ - 如何使用 Node C++ 插件部署动态库?

java - 使用 try/catch 将数字存储到用户定义的数组中,并在最后一个数组索引中继续

javascript - Angular 4 中的 entryComponents,如何监听父元素中的事件,从 entryComponnents 发出

javascript - 使用 CryptoJS 在 Javascript 中加密并在 Java 中解密