ReactiveCocoa использует RACSignal, а PromiseKit использует Promise для переноса значений. Они оба могут связывать асинхронные работы вместе. В чем основное отличие дизайна ReactiveCocoa от PromiseKit?
В чем основное различие между ReactiveCocoa и PromiseKit?
Ответы (1)
сигналы и промисы — это два способа представления асинхронных операций в виде типизированных значений, которые можно передавать, соединять в цепочки, компоновать, вкладывать и т. д. способами, недоступными для обратного вызова/уведомления/делегата.
разница между ними подобна разнице между квадратом и прямоугольником, где все обещания являются сигналами, но не все сигналы являются обещаниями. обещание — это один конкретный вариант использования сигнала.
сигнал представляет собой временную шкалу любого количества асинхронных событий, завершающихся завершением или сбоем. На следующих диаграммах показаны все возможные сигналы — любое количество событий, заканчивающихся сбоем или завершением.
--------------------Event(eventData)-Completion()
--------------Completion()
Event(eventData)---------Event(eventData)----------Failure(errorData)
-------------------------------------Failure(errorData)
обещание представляет собой одно асинхронное событие или одиночный асинхронный сбой. следующие диаграммы представляют возможные обещания:
-------Completion(eventData)
----------------------------------------------Completion(eventData)
--------Failure(errorData)
------------------------Failure(errorData)
как вы, наверное, уже заметили, любое обещание может быть представлено сигналом, который отправляет завершение сразу после отправки своего первого события, например:
-------Event(data)+Completion()
-------------------------------------------Event(data)+Completion()
--------Failure(errorData)
------------------------Failure(errorData)