FBLPromises 源码分析

本文详细分析了FBLPromise库的源码,包括Promise的状态转换、DispatchGroup的使用以及链式调用的实现。FBLPromise是Objective-C下的Promise实现,通过简单的扩展实现了异步操作的管理和链式调用,提高了代码的可读性和可维护性。
摘要由CSDN通过智能技术生成

Intro

Promise 是什么?根据维基百科的定义

They describe an object that acts as a proxy for a result that is initially unknown, usually because the computation of its value is not yet complete.

很多编程语言都有 Promise 的库,甚至有些语言,如 Javascript,甚至集成到了标准库中。作为 iOS 开发者,也避免不了写大量回调的代码,然而这样直接的写法在复杂的异步场景下,会带来可理解性和可维护性上的挑战。Promise 作为一个比较轻量级的抽象,在 OOP 的包装下,通过一些简单的扩展实现,可以很方便地处理一些异步场景,如then:(链式调用),all:(等待多个异步结果),retry:(重试)等。

FBLPromise

FBLPromises 就是在 Objective-C 下的一个 Promise 库。下面以它的源码作为分析,其实核心代码只有两个函数。

在 FBLPromise 对象中,有这些实例变量和静态变量。

static dispatch_queue_t gFBLPromiseDefaultDispatchQueue;

@implementation FBLPromise {
  /** Current state of the promise. */
  FBLPromiseState _state;
  /**
   Set of arbitrary objects to keep strongly while the promise is pending.
   Becomes nil after the promise has been resolved.
   */
  NSMutableSet *__nullable _pendingObjects;
  /**
   Value to fulfill the promise with.
   Can be nil if the promise is still pending, was resolved with nil or after it has been rejected.
   */
  id __nullable _value;
  /**
   Error to reject the promise with.
   Can be nil if the promise is still pending or after it has been fulfilled.
   */
  NSError *__nullable _error;
  /** List of observers to notify when the promise gets resolved. */
  NSMutableArray<FBLPromiseObserver> *_observers;
}


...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值