Вы можете использовать catchError :
Вам необходимо вернуть Observable
, поэтому позвоните непосредственно в службу _us:
this.verifyFacebookUser2() {
.catchError(() => this._us.facebookRegisterObs({"id_facebook": id}))
.subscribe((user: User) => {
alert('OK');
}
или измените значение registerIdFacebook на вернуть метод обслуживания:
registerIdFacebook(id) {
return this._us.facebookRegisterObs({"id_facebook": id})
.pipe(tap(
(resultado) => {
alert(JSON.stringify(resultado));
},
(error) => {
//TODO PRESENT TOAST
alert(JSON.stringify(error));
}));
}
this.verifyFacebookUser2() {
.catchError(() => this.registerIdFacebook(this.userId))
.subscribe((user: User) => {
alert('OK');
}
Некоторые рассматривают его как инструмент, который будет неправильно использован. Как "Опция, Строгая Прочь" и "На Ошибочном Резюме Затем" в VB, который никогда не имели "чистые" языки как C# и Java.
Многие сказали то же о ключевом слове "var", все же я не вижу, что им злоупотребляют, после того как это стало понятым, что это не было то же как "Вариант" VB
Этим можно было злоупотребить в местах, что ленивые разработчики не хотят классы начинающего работу типа и просто пробуют выгоду динамические вызовы вместо того, чтобы писать, "если вздором является Вздор...".
Я лично чувствую, что это могло использоваться правильно в таких ситуациях недавний вопрос, на который я ответил.
Я думаю те действительно понимание, что это - питание, те, которые в большой степени на динамические языки.NET.
Я думаю, что большое отвращение, которое люди выражают этой функции, сводится к "этому, функция сквернословия, потому что это позволит плохим разработчикам писать плохой код". Если Вы думаете об этом той логикой, все функции языка плохи.
Когда я сталкиваюсь с блоком кода VB, который снабдил префиксом некоторый гений On Error Resume Next
, это не VB, который я проклинаю. Возможно, я должен, я предположить. Но по моему опыту человек, который полон решимости поместить пенс в блок предохранителей, найдет путь. Даже если Вы освободите его карманы, то он сформирует свои собственные пенсы.
Меня, я с нетерпением жду более полезного способа взаимодействовать между C# и Python. Я пишу все больше кода, который делает это. dynamic
ключевое слово не может прибыть достаточно скоро для того конкретного варианта использования, потому что текущий способ сделать его заставляет меня чувствовать, что я - советский академик в 1950-х, который путешествует на Запад для конференции: существует огромная сумма правил и документов, прежде чем я доберусь для отъезда, я вполне уверен чья-то попытка наблюдать за мной все время, которое я там, и большая часть того, что я беру, в то время как я, там будет отнят меня на границе, когда я возвращаюсь.
динамичный плохо, потому что код как это появится повсеместно:
public dynamic Foo(dynamic other) {
dynamic clone = other.Clone();
clone.AssignData(this.Data);
return clone ;
}
вместо:
public T Foo<T>(T other) where T: ICloneable, IAssignData{
T clone = (T)other.Clone();
clone.AssignData(this.Data);
return clone;
}
Первый, не имеет никакой статической информации о типе, никакое время компиляции, проверяя, это не сам документирование, никакой вывод типа, таким образом, люди будут вынуждены использовать динамическую ссылку на сайте вызова для хранения результата, ведя к большему количеству потери типа, и все это постепенно снижается.
Я уже начинаю бояться динамичный.
Править: Опасность передала (Уф!)... и динамичный не был злоупотреблен, в конце концов, никакая потребность вниз проголосовать за меня после 3 лет :)
Это - вид подобных обсуждающих общедоступных камер, уверенных, что они могут и неправильно использоваться, но существуют преимущества для наличия их также.
Нет никакой причины, почему Вы не могли запретить "динамическое" ключевое слово в своей собственной инструкции по кодированию, если Вам не нужны они. Таким образом, какова проблема? Я имею в виду, если Вы хотите сделать сумасшедшие вещи с "динамическим" ключевым словом и притвориться, что C# является некоторым кузеном мутанта JavaScript, быть моим гостем. Просто не допустите эти эксперименты в мою кодовую базу.;)
Когда люди понимают, что не получают хороший IntelliSense с dynamic
, они переключатся назад от того, чтобы быть dynamic
- счастливый к dynamic
- when-necessary-and-var
- at-all-other-times.
Цели dynamic
включайте: совместимость с динамическими языками и платформами, такими как COM/C ++ и DLR/IronPython/IronRuby; а также поворачивая сам C# в IronSmalltalkWithBraces со всем реализация IDynamicObject
.
Хорошие времена будут иметься всеми. (Если Вы не должны поддерживать код, кто-то еще записал.)
Реальная ловушка? Серьезное отсутствие документации. Архитектура целого приложения существует в уме человека (или люди), кто записал это. По крайней мере, со строгим контролем типов, можно пойти, видят то, что объект делает через его определение класса. С динамическим контролем типов необходимо вывести значение из, он - использование, в лучшем случае В худшем случае Вы понятия не имеете, каков объект. Это похоже на программирование всего в JavaScript. ACK!
Я не вижу оснований, почему текущий способ вызвать методы динамично испорчен:
Это проводит три строки, чтобы сделать это, или можно добавить дополнительный метод в Системе. Объект сделать это для Вас:
class Program
{
static void Main(string[] args)
{
var foo = new Foo();
Console.WriteLine(foo.Invoke("Hello","Jonathan"));
}
}
static class DynamicDispatchHelper
{
static public object Invoke(this object ot, string methodName, params object[] args)
{
var t = ot.GetType();
var m = t.GetMethod(methodName);
return m.Invoke(ot, args);
}
}
class Foo
{
public string Hello(string name)
{
return ("Hello World, " + name);
}
}
FUD. Возможно, это лучший вариант со времен нарезанного хлеба, но весь мой опыт работы с VB, JavaScript и т. Д. Вызывает у меня мурашки по поводу того, что C # будет иметь динамическую привязку. Я знаю, что в ближайшем будущем я смогу взглянуть на это рационально и посмотреть, насколько хороша эта новая функция для обеспечения взаимодействия с динамическими языками. Но на это потребуется время. Я человек, ладно? : -)