Вам действительно нужно возвращать этот объект синхронно, когда fn()
не вернул обещание? Было бы намного проще, если бы ваша функция всегда могла вернуть обещание. Вы просто resolve
указали бы значение, и независимо от того, было ли это простым значением, потом или обещанием, вы получите от него обещание.
Тогда вы бы связали свою логику обработки результатов / ошибок с этим, только один раз:
function dispatchCall() {
// ...
// return Promise.resolve(fn.apply(context, args))… - doesn't catch synchronous exceptions
return new Promise(function(resolve) {
resolve(fn.apply(context, args)); // promise constructor catches exceptions
}).then(function (result) {
// the promise was fulfilled
if (result !== undefined) {
return { status: 0, result: result };
} else {
return { status: 0 };
}
}, function (err) {
// the promise was rejected
if (typeof err === "object") {
return { status: 400, errorMessage: err.name + ", " + err.message, stack: err.stack };
} else {
return { status: 400, errorMessage: err };
}
});
}
Для чего это стоит, комментарий от другого новичка в разработке iPhone ...
Мой фон - я был Программист на Си около 15 лет назад, и с тех пор я немного перешел на технологии - теперь я - разработчик Adobe Flex в своей повседневной работе. Ночью, однако, я пытаюсь превратиться в разработчика для iPhone; -)
Поэтому я купил книгу о разработке для iPhone SDK - «iPhone в действии». Я также купил «Программирование в Objective-C 2.0». Я думал, что с этими двумя буду настроен, но после нескольких дней чтения и работы с упражнениями стало ясно, что ... я безнадежно растерялся!
Так что я купил другую книгу - на этот раз, "iPhone SDK Development" из Pragmatic Bookstore - эта книга находится в стадии разработки, но выглядела «правильно» для меня. Оказывается, эта книга взяла меня дальше - это большая часть работы - однако, первые главы были хорошо спланированы, и я смог следовать, а затем внезапно они начали предполагать, что я прекрасно помню извлеченные уроки и процедуры последовал в предыдущих главах, и я снова начал немного колебаться - худшее, что я нахожу, когда пытаюсь чему-то научиться из книги, - это постоянно прыгать с места на место, чтобы понять, кем я должен быть делаю.
Итак (да, я знаю ... но потерпите меня ...) я купил ДРУГУЮ книгу ... "Начало разработки iPhone" у APress. Теперь эта книга ничего не предполагает. ЭТА книга попадает в цель для начинающих разработчиков iPhone. Не нужно прыгать вокруг, и, наконец, я обнаружил, что прогрессирую.
Однако, что я Я обнаружил, что ВСЕ три книги в СОЕДИНЕНИИ друг с другом действительно, кажется, дают мне более полную картину - вместе у меня есть большой набор учебного и справочного материала. Книга Objective-C, которую я еще не затронул, но я ожидаю, что это будет то, что мне нужно - справочное руководство по языку; Я не буду нуждаться в этом, пока не буду намного глубже в кишках. Я медленно выхожу из этого ужасного «в глубоком конце, и я не могу очень хорошо плавать», чувствуя себя таким, где я могу, по крайней мере, идти по воде. Надеюсь, с немного большим количеством гребли я смогу дотронуться до дна - конечно, моя уверенность вернется; -)
Так что в любом случае, чтобы ответить на первоначальный вопрос - лично, если я сделал это снова, я не Не думаю, что я бы чего-то достиг, начав сначала с создания Mac, а затем с iPhone. Я определенно потерял бы меньше волос, если бы сначала купил книгу APress - для меня это была книга, которая имела для меня полное значение. Я думаю, что тогда книга Pragmatic 'iPhone SDK Development' была лучшей книгой по резервному копированию. Это путь, который я предложил коллеге, и я уверен, что он хороший.
Надеюсь, это поможет!
Джейми.
Определенно полезно иметь опыт работы с Какао, прежде чем приступить к разработке iPhone, но лично я бы не стал так волноваться много. Изучить, как использовать инфраструктуру Какао и в целом освоиться с ней, было бы полезно, но есть некоторые аспекты программирования Какао на рабочем столе, которые, как вы обнаружите, имеют мало отношения к программированию на iPhone (например, дизайн пользовательского интерфейса с помощью Interface Builder). Кроме того, есть уникальные аспекты программирования на iPhone, к которым обычное программирование на Какао не подготовит вас. (У некоторых опытных разработчиков Cocoa все еще была некоторая кривая обучения, когда они впервые начали разрабатывать iPhone.)
Другими словами, я бы порекомендовал изучить основы нормальной разработки Cocoa, но вы выиграли '
Нет необходимости или пользы в изучении настольного Cocoa перед переходом на UiKit на iPhone. Могут быть некоторые недостатки.
Несмотря на то, что UIkit и Cocoa разделяют множество концепций, их нелегко изучить на рабочем столе. И, в конце концов, они не идентичны. Точно так же существует множество фреймворков, которые используются совместно iPhone и настольным компьютером - в этих случаях от использования настольных версий до их эквивалентов на телефоне ничего не дадут.
Есть некоторые трудности, с которыми вы столкнетесь только на iPhone, и вещи, которые могут упростить работу на настольном компьютере:
Я считаю, что лучше привыкнуть к этим проблемам как можно скорее, а не впадать в «дурные привычки» на рабочем столе (или просто порождать недоразумения когда идешь в айфон).
Если ваша единственная цель при кодировании настольных приложений - это знакомство с Objective-C, какао и Xcode, это не Стоит.
Вы ничего не узнаете, начиная с настольных приложений, которые вы бы не узнали прямо в приложениях для iPhone. Настольные приложения не проще, чем приложения для iPhone, они просто разные.
Это может даже привести к обратным результатам, если вы изучите особенности настольных приложений, которые вам придется «разучить» при разработке iPhone.
Конечно, если ваш Намерение состоит в том, чтобы войти в экосистему OS X, изучение обоих было бы очень ценно.
In some ways the iPhone is simpler for a C/C++ developer. No garbage collection is the big one. If you start on the desktop and get used to GC, you'll have a hell of a time when you hit the iPhone.
Самая большая проблема не в изучении Какао и / или Какао Touch, а в Objective-C. Когда у вас есть основы, Какао прост и похож на многие другие ОО-структуры.
Я предлагаю:
Если у вас есть какой-либо опыт разработки, вы знаете, что все языки похожи, и вы знаете только, если полностью его понимаете работая с ним.
Мой подход к изучению новой среды разработки состоит в том, чтобы выбрать проблему, которую вы хотите решить (и так как телефон постоянно находится в вашем кармане, у вас, вероятно, будет какое-то представление), и попытайтесь ваша голова на этом.
Тонна примеров кода для яблок, ответы здесь и на других сайтах. Начните с рабочего примера приложения, которое не слишком далеко от того, что вы хотите сделать, и настройте его с течением времени. Вы удовлетворены рабочим приложением, сразу же узнаете о проблемах и можете учиться мелочам одновременно.