如果您使用过云 API,您就会知道其中的艰辛之处 等待响应、处理事件回调以及确保每个请求都按正确的顺序发生。事情很快就会变得混...

如果您使用过云 API,您就会知道其中的艰辛之处 — 等待响应、处理事件回调以及确保每个请求都按正确的顺序发生。事情很快就会变得混乱,尤其是当多个操作相互依赖时。
为了改善这种情况,我们不久前在 TMS FNC Core 中引入了 Promises。现在,我们很高兴将 Promise 支持直接引入 TMS FNC Cloud Pack!无需管理事件处理程序,Promises 可让您编写更易于阅读和维护的清晰、连续的代码。
事件有什么问题?
事件驱动编程是可行的,但它可能会导致逻辑混乱。以下是获取文件夹列表的示例:
- procedure TForm1.btnClick(Sender: TObject);
- begin
- TMSFNCCloudStorageServices1.GetFolderList;
- end;
- procedure TForm1.TMSFNCCloudStorageServices1GetFolderList(Sender: TObject;
- const AItems: TTMSFNCCloudItems;
- const ARequestResult: TTMSFNCCloudBaseRequestResult);
- begin
- //Handle AItems result here
- end;
通常,这两段代码相距很远,难以监督。最重要的是,每次调用 GetFolderList 时都会触发 OnGetFolderList 事件,因此几乎不可能为单独的 GetFolderList 调用实现自定义逻辑。
Promises 如何让事情变得更简单
通过 Promises,你可以将操作链接在一起,将所有内容放在一个地方:
- procedure TForm1.GetFolderList(AFolder: TTMSFNCCloudItem = nil);
- begin
- TMSFNCCloudStorageServices1.GetFolderListPromise(AFolder)
- .Main.ThenBy(procedure (const AVoid: TVoid)
- begin
- //Handle TMSFNCCloudStorageServices1.PromiseFolderList result here
- end);
- end;
现在逻辑很清晰:获取文件夹列表,然后更新 UI——所有这些都在一个地方完成,没有分散的事件处理程序。
真实示例:访问令牌更新
在集成 Promises 时,我们会仔细评估它们在何处带来最大价值。我们发现的一个关键领域是访问令牌续订。有效期较短的令牌可能会在您处理某项任务时过期,从而导致请求意外失败。如果没有 Promises,处理续订需要额外的检查、事件处理程序和重试逻辑。
为了解决这个问题,我们在 TTMSFNCCloudOAuth 中引入了 FetchAccessToken。这意味着所有后代组件都会自动受益于这一改进!
调用 FetchAccessToken 会返回一个包含最新有效访问令牌的字符串。如果令牌已过期,它会使用刷新令牌自动检索新令牌 - 只需一次调用即可完成!使用方法非常简单:
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- TMSFNCCloudGoogleCalendar1.FetchAccessToken.ThenBy(procedure (const AValue: string)
- begin
- TMSFNCCloudGoogleCalendar1.GetCalendar('calendarID');
- end);
- end;
或者如果你更喜欢等待:
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- TThread.CreateAnonymousThread(
- procedure
- begin
- TMSFNCCloudGoogleCalendar1.FetchAccessToken.Await;
- TMSFNCCloudGoogleCalendar1.GetCalendar('calendarID');
- end).Start;
- end;
今天就尝试一下!
作为第一步,我们将承诺整合到一系列最常用的服务中。这些服务包括:
- TTMSFNCCloudStorageServices, 包括针对以下方面的单独改进:
- TTMSFNCCloudGoogleDrive
- TTMSFNCCloudDropBox
- TTMSFNCCloudMicrosoftOneDrive
- TTMSFNCCloudBox
- TTMSFNCCloudGoogleGmail
- TTMSFNCCloudMicrosoftOutlookMail
- TTMSFNCCloudStellarDataStore
- TTMSFNCCloudOAuth (FetchAccessToken)
更新到最新版本,将您的云端应用提升到新的水平!有任何问题、意见或需要进一步的帮助吗?请随时联系我们,如果您需要 Promises 对其他云服务的支持,请不要忘记查看我们的功能请求页面。