如今,Promises或更确切地说Promises/A+已经成为使用JavaScript的Web开发人员处理和编排异步操作的标准。使用async…await on the horizon,事情会变得更加令人兴奋。
如果您对这个术语还不熟悉,您可以在这里找到一个简短的介绍。
但在这篇文章中,我们将不讨论承诺本身,而是介绍一种通用方法,人工智能本科,淘客佣金,将基于"传统"回调的API转换为基于"现代"承诺的API。在Web开发人员中,这种方法通常被称为promission或short promisfy(例如。节点.js提供自己的使用承诺)
特别是我们要转换sap.ui.model模型.odata.v2.ODataModel返回适当的承诺,让我们的生活更轻松。
让我们直接跳进去看看典型的通话至sap.ui.model模型.odata.v2.ODataModel#read
如果我们希望readData返回一个承诺,我们可以简单地包装调用并在成功时解决,数据呈现,在错误时拒绝:
在成功的情况下,我们只需收集数据和响应,并在单个对象中解决它们。
对于错误的情况,我们通过转发消息的适当错误实例拒绝,这是最佳实践。试想一下try-catch中的错误:捕捉字符串或任何其他类型都会很奇怪,对吧?
我们还希望有一个适当的堆栈跟踪,以防出现错误。
上述模式可以很容易地应用于任何创建、读取、更新、删除或调用函数的调用sap.ui.model模型.odata.v2.ODataModel.
既然我们都很懒,为什么不创建一个像这样的小通用助手:
还不要被private\u promisify方法吓到。让我们先看看下面的代码。
我们的小助手将导出一个函数promisify,它需要一个sap.ui.model模型.odata.v2.ODataModel(oModel)作为唯一的参数。
每次调用此函数都将返回一个对象,该对象正好有五个函数:create、read、update、delete和callFunction。对其中任何函数的每次调用都将接受与函数等价的相同数量和类型的参数sap.ui.model模型.odata.v2.ODataModel。但有一个区别:它们将返回一个承诺。
私有助手方法是唯一有点棘手的部分。
它接受三个参数(我们的oModel实例,物联,要调用的方法名和索引)并将返回一个函数。
而前两个参数非常直接,让我们解释一下为什么我们需要这个索引。
与我们最初的例子不同,我们需要知道在哪个索引上传递mParameters参数,与我们的成功/错误处理程序一起解决/拒绝承诺。
对于oModel.read文件它将是第二个参数(索引1)和oModel.create创建它将是第三个参数(索引2)。
一旦我们知道索引我们可以得到MPareters(或回退到空对象),国内大数据,并分配成功和错误回调,正如我们已经看到的一样。
另一点值得一提的是,我们不改变和修改原始oModel实例。所以我们不需要担心打破任何东西。我们只是在内部使用它。
导入promisify util后,我们可以在控制器中简单地开始使用它: