在nodejs下判断数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在nodejs下判断数组相关的知识,希望对你有一定的参考价值。

参考技术A 最新版的nodejs已经可以直接使用 Array.isArray() 进行判断。
或者使用以前的笨办法: Object.prototype.toString.call(arr)==='[object Array]' 。

等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个

【中文标题】等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个【英文标题】:Wait on each for loop iteration to finish before starting the next in nodejs 【发布时间】:2021-07-06 09:15:31 【问题描述】:

我有一个以逗号分隔的 URL 数组。我似乎无法让循环在开始下一次迭代之前完成每次迭代。 这是我的代码:

const options = 
  method: 'post',
  headers: 
    'Authorization': 'Basic '+Buffer.from(`$user:$password`).toString('base64')
  ,

for (let url of urls.split(",")) 
  console.log(url);
  await axios.get(url, options)
  .then(response => 
    console.log(url);
    <--Rest of my code-->
  )

我可以看到第一个 console.log() 立即运行,因此 for 循环不会在开始下一个迭代之前等待一个迭代完成。

我已经尝试了几种不同的解决方案来尝试使这个异步,包括:

    将“for”循环更改为“for await”循环,导致保留关键字出现语法错误。 将 For 循环放入异步函数中。

像这样:

const calls = async (urls2) => 
  for (let url of urls2.split(",")) 
    await axios.get(url, options)
    .then(response => 
      console.log(url);
      <--Rest of my code-->
    )
  

calls(urls).catch(console.error);

我认为最后一个失败是因为,虽然函数是异步的,但其中的所有内容仍然是同步的。

我需要的只是循环的每次迭代在下一次开始之前完成。 最简单的方法是什么?

【问题讨论】:

【参考方案1】:
const calls = async(urls2)=>
   for (let url of urls2.split(",")) 
        const response = await axios.get(url,options); //will wait for response
        console.log(response.data);
        //rest of the code
   



【讨论】:

以上是关于在nodejs下判断数组的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS - 使用 Q 对对象数组执行异步操作,有点扭曲

Nodejs Mongoose 获取属性值的结果数组

nodejs中怎么判断一个对象类型

nodejs中对于数组的相关处理

前端知识体系-NodeJS相关浅谈NodeJS中间件

如何在 NodeJS 中展开对象数组?