Задать вопрос
Tash1moto
@Tash1moto

Почему ответы одинаковые?

Всем привет.
Есть ссылка, которая при каждом запросе отдает шутки, с сайта tproger.
"https://tproger.ru/wp-content/plugins/citation-widget/get-quote.php?_=1548878205977"

Есть код который делает 5 запросов.
Но почему такое поведение ? ответы должны быть разные,
но в итоге я получаю 5 одинаковых ответов

const https = require('https')
const url = "https://tproger.ru/wp-content/plugins/citation-widget/get-quote.php?_=1548878205977"

let query = new Promise((resolve,reject)=>{
  https.get(url,resp=>resp.on('data',chunk=>resolve(chunk.toString())))
})

(async()=>{
  let queryList = new Array(5).fill(query)
  let results = await Promise.all(queryList).then(data=>data)
  console.log(results)
})()

результат:
=> Promise { <pending> }
[ 'Перед тем, как программировать, полгода подбирал язык программирования.',
  'Перед тем, как программировать, полгода подбирал язык программирования.',
  'Перед тем, как программировать, полгода подбирал язык программирования.',
  'Перед тем, как программировать, полгода подбирал язык программирования.',
  'Перед тем, как программировать, полгода подбирал язык программирования.' ]
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Tash1moto
@Tash1moto Автор вопроса
всё, разобрался.
Обернул промис в функцию, что-бы при вызове возвращала новый элемент а не ссылку на переменную с промисом

const https = require('https')
const url = "https://tproger.ru/wp-content/plugins/citation-widget/get-quote.php?_=1548878205977"

let query = () =>{
	return new Promise((resolve,reject)=>{
		https.get(url,resp=>resp.on('data',chunk=>resolve(chunk.toString())))
	})
};

let queryList = [...Array(5).keys()].map(el=>query())

let main = async()=>{ 
  let results = await Promise.all(queryList).then(data=>data)
  console.log(results)
}

main();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Empower people to give
Вот это .php?_=1548878205977 - надо генерить динамически
Например так

const url = "https://tproger.ru/wp-content/plugins/citation-widget/get-quote.php"

let query = () =>{
  return new Promise((resolve,reject)=>{
    https.get(url + '?_=' + Date.now(), .... 
    // или так
    https.get(url + '?_=' + Math.random(), ....
};


Иначе может быть закешированный ответ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы