Я хотел бы использовать Обещания в моих методах класса.В Антипаттернах Promise я читал, что создание нового обещания для каждой новой функции считается плохим.
Однако я не хочу возвращать несвязанные обещания в моем проекте, поэтомуЯ думал о том, чтобы сделать что-то вроде этого:
class MyClass {
async getToken() {
return new Promise(
(resolve, reject) => {
// . . .
const token_str = '<response_from_http_request>';
resolve(token_str);
}
)
}
async doSomething(token) {
return new Promise(
(resolve, reject) => {
const result = // . . .
resolve(result);
}
)
}
async doAnotherSomething(token) {
return new Promise(
(resolve, reject) => {
const result = // . . .
resolve(result);
}
)
}
}
Тогда я бы использовал это так:
let instance = new MyClass();
(async () => {
const token = await instance.getToken();
const result1 = await instance.doSomething(token);
console.log(result1);
const result2 = await instance.doAnotherSomething(token);
console.log(result2);
})();
Это похоже на правильный способ сделать это, или это антипаттернтоже?И если так, как я могу избежать написания такого кода?
РЕДАКТИРОВАТЬ: Что если мне нужно сделать несколько последовательных http-вызовов, выполнить некоторые действия с результатами и затем вернутьОбещание на его основе?
Насколько я понимаю, если я не сделаю новое Обещание, я должен вернуть то, что было сделано библиотекой got.js
, которая включает в себяданные ответа http.
Вместо этого я хочу вернуть Promise, который содержит результат моего метода класса.
Пример:
async getCityWeather( city_name ) {
return new Promise(
(resolve, reject) => {
// get the city id based on its name
const city_id = await got(`https://my-api/getCityIdByName/${city_name}`);
// now get the weather info for the city with id `cityid`
const weather_info = await got(`https://my-api/weatherById/${city_id}`);
// make an object to return
const temperature = {
weather_info.temp_min,
weather_info.temp_max,
}
resolve(temperature);
// ... all error handling are omitted
}
)
}
Я не хочу возвращать Promise, содержащий got.js возвращаемые значения, я хочу вернуть мои значения, основанные на вызовах http-запроса.