#javascript #cypress
#язык JavaScript #кипарис
Вопрос:
Вот мой код, я передаю массив идентификаторов, и для каждого идентификатора я нажимаю запрос Api.
for (let i = 0; i lt; 10; i ) { cy.request({ method: 'GET', url: `https://[API endpoint ]/api/v1/[requst]/${ids[i]}`, headers: { "authorization": token } }) .then((res) =gt; { return usernames.push([{ value: res.body.instagrams[0].username }]) }) .then((res) =gt; { return cy.wait(2000) }) }
Всякий раз, когда я выполняю код, для 2-3 запросов он работает нормально, а затем выдает ошибку типа
Uncaught Error: invalid payload
Я вижу, что мой URI правильный и отправляет правильный запрос.
Ответ №1:
вы должны изменить свой код, чтобы обернуть все ожидающие обещания в массив. Измененный фрагмент кода выглядит следующим образом:
async function processRequest(){ let result; let promises = []; for (let i = 0; i lt; 10; i ) { promises.push(cy.request({ method: 'GET', url: `https://[API endpoint ]/api/v1/[requst]/${ids[i]}`, headers: { "authorization": token } })) } result = await Promise.all(promises); for(let i = 0; i lt; 10; i ){ usernames.push([{ value: result[i].username }]) } }
Комментарии:
1. Спасибо за ответ ! Но это не работает 🙁
2. не могли бы вы, пожалуйста, сохранить аналогичный код в jsfiddle или где-нибудь еще, чтобы мы могли разобраться в ошибке? очевидно, что в приведенном выше фрагменте будут внесены некоторые изменения.
3. Получаю ту же ошибку, что и выше. И извините, брат не может воспроизвести на jsfiddle, потому что он содержит учетные данные
Ответ №2:
Здесь cy.request
не работает должным образом с обещанием. Либо при нажатии на массив обещаний, удалите cy.request()
его, либо просто обработайте с помощью javascript.
async findUserName(ids, token) { let promise = [] let usernames = [] ids.forEach(id =gt; { promise.push( fetch(`https://[host]/api/v1/[endpoint]/${id}`, { headers: { 'Content-Type': 'application/json', "authorization": token } }) .then((res) =gt; { return res.json(); }) ) }) let result = await Promise.all(promise); result.forEach((data) =gt; { usernames.push([{ value: data.instagrams[0].username }]) }) return usernames
}