В какой-то момент мы несколько раз вызываем наш бэкэнд с fetch
.Каждый звонок возвращает обещание, которое мы собираем и передаем нашему responseHandler
.Предполагается, что этот обработчик отправляет избыточные действия при поступлении каждого ответа. Действие будет изменяться по-разному в зависимости от двух факторов:
- кода ответа сервера
- содержимогозапрос
так что у нас есть
function save(objects) {
let promises = objects.map(object => {
let promise = fetch(url, {..., body: object});
});
responseHandler(promises);
}
function responseHandler(promises) {
for (let promise of promises) {
promise
.then(r => {
return r.json();
})
.then(body => dispatchSomeAction(body));
}
}
Пока все хорошо.Но теперь нам нужна информация изнутри save
и изнутри анонимной функции, которая получает объект response
.Поэтому я придумал следующий подход.Но он чувствует, что неправильно совмещать объект обещания.Я не могу сказать почему.
function save(objects) {
let promises = objects.map(object => {
let promise = fetch(url, {..., body: object});
promise._objectType = object._type;
});
responseHandler(promises);
}
function responseHandler(promises) {
for (let promise of promises) {
promise
.then(r => {
promise._status = r.status;
return r.json();
})
.then(body => dispatchSomeAction({
status: promise._status,
type: promise._type, ...body
}));
}
}
Как можно видеть, каждый раз, когда я хочу, чтобы значение области было доступно позже, я помещаю его в объект обещания, потому что этот объект обещания находится во всех других областях.Есть ли способ очистки ?
Примечание: серверная часть возвращает объект, который не обладает свойством _type
(на самом деле я очищаю свои объекты от этих флагов перед отправкой их в серверную часть).Это флаг внешнего интерфейса, который мне все еще требуется, когда приходит ответ)