dmitry-l
@dmitry-l

Как переписать данный код на async/await?

deleteAll() {
	const ids = this.data.map(item => item.id)

	const deletePromises = ids.map(id => {
		return new Promise(resolve => {
			return this.delete(id).then(data => resolve(data))
		})
	})

	return new Promise(resolve => {
		return Promise.all(deletePromises).then(() => {
			runInAction(() => {
				this.data = []
				resolve()
			})
		})
	})
}


Переписал так:
deleteAll() {
	const ids = this.data.map(item => item.id)

	const deletePromises = ids.map(id => {
		return new Promise(async (resolve) => {
			await this.delete(id)
			resolve(true)
		})
	})

	return new Promise(async (resolve) => {
		await Promise.all(deletePromises)
		runInAction(() => {
			this.data = []
			resolve()
		})
	})
}

Код работает, но профита что-то никакого не ощутил, может можно написать получше?
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
const deletePromises = ids.map(id => {
  return new Promise(resolve => {
    return this.delete(id).then(data => resolve(data))
  });
});

Вот это бессмысленное использование new Promise. this.delete(id) это уже промис, так что это код переписываем в
const deletePromises = this.data.map(item => this.delete(item.id));


Дальше то же самое.
return Promise.all(deletePromises).then(() => {
  runInAction(() => {
    this.data = [];
  });
});


А теперь перепишем это на async/await
async deleteAll() {
  const deletePromises = this.data.map(item => this.delete(item.id));
  await Promise.all(deletePromises);
  runInAction(() => {
    this.data = [];
  });
}


UPD: почитал https://mobx.js.org/best/actions.html#async-await и исправил
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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