gpt4 book ai didi

javascript - https 循环请求,在发出最后一个请求后调用函数 Node

转载 作者:行者123 更新时间:2023-12-03 00:58:39 26 4
gpt4 key购买 nike

假设我多次调用 https 来检索数据,并且我想在最后一次请求结束时调用函数 formatJsonToLocale 。除了检查数组的最后一个元素之外,是否有办法确定请求何时结束。

let sheetsArray = []

function sheetsAsJsonById (ids) {
for (let i = 0; i < ids.length; i++) {
const queryUrl = `sheets.html`

https
.get(queryUrl, res => {
let stream = []
res
.on('data', function (data) {
stream.push(data)
})
.on('end', function () {
let data = Buffer.concat(stream)

data = JSON.parse(data)
sheetArrays.push(data['values'])

formatJsonToLocale(sheetsArray) // <----- call this one after last request
})
})
.on('error', err => {
console.error(`Error in response: ${err}`)
})
}
}

当我在函数外部调用 formatJsonToLocale 时,我会遇到一个问题,即前一个函数可能无法完成,因为 https 异步处理内容。

关于如何处理这个问题有什么建议吗?

最佳答案

您需要跟踪在 for 循环内执行的异步代码 (https.get) 的执行情况。这可以使用以下 promise 来实现:

let sheetsArray = []

function sheetsAsJsonById (ids) {

let promises = []

for (let i = 0; i < ids.length; i++) {
const queryUrl = `sheets.html`
promises.push(makeHTTPRequest(queryUrl))
}

Promise.all(promises).then((sheetArrays) => {
formatJsonToLocale(sheetsArray)
})
}



const makeHTTPRequest = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, res => {
let stream = []
res
.on('data', function (data) {
stream.push(data)
})
.on('end', function () {
let data = Buffer.concat(stream)

data = JSON.parse(data)
resolve(data)
})
.on('error', err => {
console.error(`Error in response: ${err}`)
})
})
}

如果你想坚持回调,你可以使用asyncasync.each函数 Node 模块。

关于javascript - https 循环请求,在发出最后一个请求后调用函数 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52705449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com