我的目标是实现futures和promises以及jQuery.Deferred的实施。
但目前仅实现了...
ARNDeferred很简单。
ARNDeferred的功能如下
order调用时调用。
仅解析和拒绝一次。
如果您取消,则order、解析和拒绝都不会调用。
完成只在最后一次调用一次。
它受到了以下产品的启发。
要运行示例项目,首先克隆仓库,然后从Example目录运行pod install
。
ARNDeferred *def = [ARNDeferred deferred];
def.then (^(ARNDeferredTask *task, id resultObject) {
// call
// resultObject -> @"test"
[task done:@"test2"];
});
def.then (^(ARNDeferredTask *task, id resultObject) {
// call
// resultObject -> @"test2"
[task done:@"test3"];
});
def.resolved (^(id resultObject){
// call
// resultObject -> @"test3"
});
def.rejected (^(id resultObject){
// not call
});
def.canceller (^(id resultObject){
// not call
});
def.completion (^{
// call
});
[def runDeferred:@"test"];
ARNDeferred *def = [ARNDeferred deferred];
def.then (^(ARNDeferredTask *task, id resultObject) {
// call
// resultObject -> @"test"
[task fail:@"test2"];
});
def.then (^(ARNDeferredTask *task, id resultObject) {
// not call
});
def.resolved (^(id resultObject){
// not call
});
def.rejected (^(id resultObject){
// call
// resultObject -> @"test2"
});
def.canceller (^(id resultObject){
// not call
});
def.completion (^{
// call
});
[def runDeferred:@"test"];
ARNDeferred *def = [ARNDeferred deferred];
def.then (^(ARNDeferredTask *task, id resultObject) {
// call
// resultObject -> @"test"
[task cancel:@"test2"];
});
def.then (^(ARNDeferredTask *task, id resultObject) {
// not call
});
def.resolved (^(id resultObject){
// not call
});
def.rejected (^(id resultObject){
// not call
});
def.canceller (^(id resultObject){
// call
// resultObject -> @"test2"
});
def.completion (^{
// call
});
[def runDeferred:@"test"];
ARNDeferred可在MIT许可证下获得。有关更多信息,请参阅LICENSE文件。