【发布时间】:2022-01-04 22:29:19
【问题描述】:
我正在编写一个节点脚本来从带有https module 的 URL 中提取状态代码。该脚本有一组 URL。我正在使用 forEach 循环遍历它们并进行 https.get() 调用。
我看到的问题是 https 调用似乎不会发生(或者,至少不会触发它们的回调函数),直到整个 forEach 循环完成,它们似乎都在运行。
这是我正在使用的代码:
const https = require('https')
const urls = [
'https://www.example.com/',
'https://www.example.org/',
'https://www.example.net/',
'https://www.example.com/',
'https://www.example.org/',
'https://www.example.net/',
'https://www.example.com/',
'https://www.example.com/',
'https://www.example.com/',
'https://www.example.com/',
'https://www.example.org/',
'https://www.example.net/',
]
function processResponse(response) {
console.log(`${Date.now()} - response.statusCode`)
}
urls.forEach((url) => {
console.log(`Getting: ${Date.now()} - ${url}`)
https.get(url, (response) => {
processResponse(response)
})
})
输出始终是这样的:
Getting: 1637980537771 - https://www.example.com/
Getting: 1637980537810 - https://www.example.org/
Getting: 1637980537811 - https://www.example.net/
Getting: 1637980537813 - https://www.example.com/
Getting: 1637980537816 - https://www.example.org/
Getting: 1637980537818 - https://www.example.net/
Getting: 1637980537820 - https://www.example.com/
Getting: 1637980537821 - https://www.example.com/
Getting: 1637980537823 - https://www.example.com/
Getting: 1637980537827 - https://www.example.com/
Getting: 1637980537830 - https://www.example.org/
Getting: 1637980537832 - https://www.example.net/
1637980537989 - 200
1637980537992 - 200
1637980537995 - 200
1637980537997 - 200
1637980538005 - 200
1637980538006 - 200
1637980538022 - 200
1637980538023 - 200
1637980538024 - 200
1637980538026 - 200
1637980538032 - 200
1637980538035 - 200
状态码的时间戳总是在 forEach 循环的最后一项之后。这就是我不明白的。
由于有数千个 URL 和损坏的 URL,我想确保每个 URL 都是单独处理的,这样我就不会在事情发生意外时失去进展。
我愿意使用其他模块/方法,但我也想知道这里发生了什么,因为它不符合我的心智模型。
【问题讨论】:
标签: javascript node.js