Интерфейс запроса цикла

JavaScript

Это все проблемы, с которыми столкнулась предыдущая компания, сегодня А Вэй попросил меня их решить. Есть требование циклически запрашивать интерфейс для получения данных (это предполагается делать в фоновом режиме, а циклический запрос не соответствует спецификации), но я с этим сталкивался, проблема в том, что циклический запрос делается но интерфейс асинхронный, и вы передаете его по порядку.Возвращенные не обязательно возвращаются по порядку.В то время я думал о многих способах.Теоретически возможный-синхронный интерфейс запросов,но я не стал попробуйте, потому что изменения были слишком большими, и был метод await, но потому, что лярд был перепутан в то время, когда я попробовал его, и он не работает, я расскажу вам, почему он не работает, через некоторое время. В конце концов, я делаю запрос каждые 200 миллисекунд.Хотя это может быть достигнуто, это становится очень медленным, когда я его настраиваю.Иногда сеть или компьютер медленно отвечают.Это также приведет к выходу из строя.

Сначала опубликуйте изображение того, что я пробовал раньше

Из-за такого использования асинхронности я не добился успеха, и я не понимаю асинхронность досконально.Просто думаю об ожидании, чтобы ждать трудоемких запросов, игнорируя асинхронность асинхронности, цикл for не блокируется, а затем я смотрю Везде блокировать for Существует метод зацикливания, но в Интернете все говорят, как научить вас асинхронности, и мало кто говорит, как заблокировать программу, что в конечном итоге бесполезно.

и, наконец, решил

mounted() {
				this.queryNewFund()
			},
			methods: {
				async queryNewFund() {
					let that = this
					let codeList = ['1', '2', '3']
					for (let i = 0; i < codeList.length; i++) {

						let obj = await that.getData(codeList[i]);

						console.log(obj)
					}
				},
				getData(code) {
					if (code == '1') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('aaa')
							}, 2000)
						})
					}
					if (code == '2') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('bbb')
							}, 500)
						})
					}
					if (code == '3') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('ccc')
							}, 500)
						})
					}
				}
			}

Таким образом, порядок печати — aaa, bbb и ccc для решения бизнес-требований, а цикл for также блокируется.

Я не видел столько сообщений уже несколько дней и не ожидал, что будет столько сообщений. Это оставить заметку для себя. Многие друзья упомянули Promise.all. Я действительно не знал этого раньше, а потом попробовал.

aa() {
					let that = this
					let codeList = ['1', '2', '3']
					let list=[]
					for(let i in codeList){
						list.push(this.bb(codeList[i]))
					}
					Promise.all([this.bb(1), this.bb(2), this.bb(3)]).then((values) => {
						console.log(values);//['aaa', 'bbb', 'ccc']
					});
				},
				bb(code) {
					if (code == '1') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('aaa')
							}, 2000)
						})
					}
					if (code == '2') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('bbb')
							}, 500)
						})
					}
					if (code == '3') {
						return new Promise((resolve) => {
							setTimeout(() => {
								resolve('ccc')
							}, 500)
						})
					}

Это действительно лучше, чем блокировка ожидания.В приведенном выше примере ожидание теоретически занимает 2000 + 500 + 500 миллисекунд, но Promise.all берет самые длинные 2000 и возвращает. Спасибо за руководство, ребята.