Может зацикливаться на функции "Слишком быстро" сломать его (Node.js)
Я пытаюсь накапливать ответы API на сервере и возвращать их клиенту как один объект. Для этого я перебираю элементы в массиве и отображаю ответы обратно в исходный объект. Это работает нормально для массива длины 1, но регистрирует пробелы при циклическом переборе больших массивов.
При циклическом перемещении по массиву Node создает новый экземпляр функции или продолжает передавать данные в ту же функцию, даже если он еще не вернул значение?
loopThroughArray(req, res) {
for(let i=0; i<req.map.length; i++) {
stack[i] = (callback) => {
let data = getApi(req, res, req.map[i], callback)
}
}
async.parallel(stack, (result) => {
res.json(result)
})
}
....
function getApi(req, res, num, cb) {
request({
url: 'https://example.com/api/' + num
},
(error, response, body) => {
if(error) {
// Log error
} else {
let i = {
name: JSON.parse(body)['name'],
age: '100'
}
console.log(body) // Returns empty value array.length > 1 (req.map[i])
cb(i)
}
})
Если Node перегружает функцию, как я могу убедиться, что данные были получены до повторного запуска функции?
2 ответа
API-вызовы являются асинхронными.
При запуске цикла код выполняет много вызовов покоя, не дожидаясь ответа.
Если цикл не слишком велик, вы можете синхронизировать вызовы с помощью рекурсии.
Вы также можете синхронизировать звонки, используя шустрый:
Цикл ожидает завершения метода внутри него, прежде чем вернуться к началу цикла. так что на самом деле не существует такой вещи, как цикл, который движется очень быстро, если вы не используете "многопоточность", которой вы явно не используете.