Наконец, заключить в angular 2 обещание
Я заметил, что в angular 2 окончательный блок для API обещаний
angular 1:
loadUsers() {
fetch('/api/users').then((response) => {
return response.json();
}).then((data) => {
this.users = data;
}).catch((ex) => {
console.error('Error fetching users', ex);
}).finally(() => {
this.userLoaded = true;
};
Предполагая, что я должен сделать то же самое в angular 2
Как добавить окончательный блок в angular 2 обещание, на данный момент существует только then & catch blocks
, доступное в angular 2. Если нет, наконец, есть ли способ добавить код очистки после выполнения каждого метода, где я пишу код для окончательного блокирования действий?
Ответы
Ответ 1
Самый простой способ сделать это - использовать prom.finally shim.
- Добавьте его с помощью
npm install --save promise.prototype.finally
- Добавьте титры:
npm install --save-dev @types/promise.prototype.finally
- В своем основном классе перед загрузкой приложения добавьте следующий код:
import { shim } from 'promise.prototype.finally';
shim();
Теперь вы можете использовать finally
на promises.
Ответ 2
Обычно это делается с помощью Promise.always. Это берет одну функцию и добавляет новый .then
в обещание, которое дает ту же функцию для состояний успеха и отказа. Если функция недоступна в данной среде, основанной на обещании, ее довольно легко использовать polyfill.
Promise.always = function(p, fn) {
return p.then(fn, fn);
}
использование:
var prom = fetch('/api/users').then...
Promise.always(prom, () => {
this.userLoaded = true;
});
return prom;