首页 > 其他分享 >关于 SAP Fiori Elements List Report Go 按钮的实现

关于 SAP Fiori Elements List Report Go 按钮的实现

时间:2023-12-02 19:33:59浏览次数:32  
标签:Elements 函数 对象 List Promise Go setTimeout 方法 延迟

代码位置:

这段代码是 JavaScript 中的一个方法 _regularTriggerSearch,它是 SmartFilterBar 对象的原型方法。这个方法的主要目的是在一定延迟后触发搜索操作。这段代码中涵盖了 JavaScript 中的一些主要特性和概念,包括对象、原型、方法、控制流(if-else)、异步编程(setTimeout 和 Promise)等。

首先,我们来分析这个方法的具体内容。这个方法接收一个参数 iDelay,表示延迟的毫秒数。

SmartFilterBar.prototype._regularTriggerSearch = function (iDelay) {
  // ...
}

然后,这个方法首先检查 this.getSuppressSelection() 的返回值。如果返回 true,那么方法就在这里结束返回,不会执行后面的代码。这是一种常见的设计模式,叫做“提前返回”,避免了不必要的嵌套 if-else 结构,使代码更易于阅读和理解。

if (this.getSuppressSelection()) {
  return;
}

接下来,这个方法调用 _clearDelayedSearch() 方法,清理之前可能存在的延迟搜索。然后,使用 setTimeout 方法设置一个延迟操作。setTimeout 是一个全局函数,用于在指定的毫秒数之后执行一段代码。这里,我们延迟执行的是一个函数,如果 iDelay 没有指定,那么这个函数会立即执行。

this._clearDelayedSearch();
this._iDelayedSearchId = setTimeout(function () {
  // ...
}.bind(this), iDelay || 0);

需要注意的是,这里使用了 bind(this) 来确保延迟执行的函数内部的 this 仍然指向 SmartFilterBar 对象。这是因为在 JavaScript 中,函数的 this 是在运行时确定的,它通常指向调用该函数的对象。但是在 setTimeout 中,由于函数是在全局上下文中执行的,所以 this 默认会指向全局对象(在浏览器中是 window)。为了防止这种情况,我们使用 Function.prototype.bind 方法改变 this 的指向。

在这个延迟执行的函数中,首先调用 _getVisibleControlsLoadingPromises() 方法获取一个 Promise 对象的数组。Promise 是 JavaScript 中处理异步操作的一种方式,它代表了一个异步操作的最终结果。这个数组可能为空,也可能包含一个或多个 Promise 对象。

var aPromises = this._getVisibleControlsLoadingPromises();

然后,根据 _bSearchTriggeredOnce 属性和 aPromises 数组的长度来决定如何执行搜索。如果 _bSearchTriggeredOnce 属性为 false,并且 aPromises 数组的长度不为 0(也就是说,有正在加载的控件),那么我们使用 Promise.all 方法等待所有控件加载完成后再执行搜索。Promise.all 方法接收一个 Promise 对象的数组,返回一个新的 Promise 对象

标签:Elements,函数,对象,List,Promise,Go,setTimeout,方法,延迟
From: https://www.cnblogs.com/sap-jerry/p/17872096.html

相关文章

  • LinkedList
    LinkedList是Java中一种常用的数据结构,它使用双向链表实现。特点:高效的插入和删除操作:LinkedList在列表的头部和尾部进行添加和删除操作的复杂度为O(1),高效且方便。动态大小:LinkedList的大小可以根据需要自动调整,无需手动分配内存。支持null元素:LinkedList允许插......
  • ALGO ARTIS Programming Contest 2023 Autumn(AtCoder Regular Contest 168)
    Preface先补一下这场ARC的博客,因为在来回合肥的路上一直在想这场的CD,所以有空后就先把这场补了A-<Inversion>不难发现对于一段连续的<,设其长度为\(x\),则它最少要贡献\(\frac{x(x+1)}{2}\)的答案而我们很容易构造一种方案刚好满足这个下界,只要让每段的结束比下一段的开头大......
  • Go使用asynq
    asynq是基于reids的队列,支持多种形式消费者packagemainimport( "context" "fmt" "log" "os" "os/signal" "syscall" "time" "github.com/hibiken/asynq")//HandleMsg处理msgfuncHandl......
  • Mongoose介绍
    官网Mongoose.js中文网(mongoosejs.net)基本使用安装最新的是mongoose8.0.0版本,基于Promise,以前的版本是基于回调函数。npmnpmimongooseyarnyarnaddmongoose使用以mongoose8.0.0举例://1-引入mongooseconstmongoose=require("mongoose");//2-连接......
  • java练习:json字符串转map、arrayList
    使用依赖包:<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.0</version></dependency>获取数据:packagecom.example......
  • 拓数派受邀参加由Google举办的“深度探索 LLM / Generative AI的生态与应用”主题活动
    大语言模型(LLM)可谓是当下国内科创界最热门的话题。近日,拓数派创始人兼CEO冯雷(RayVon)受邀参加由Google举办的“深度探索LLM/GenerativeAI的生态与应用”主题活动,与现场嘉宾共话科技行业发展新趋势。图为:活动现场照片在圆桌讨论环节中,冯雷与主持人及几位创业公司高管,进行了一场......
  • 视频监控平台LiteCVR启动时打印starting server:listen tcp的原因排查
    近年来,随着人工智能与行业领域深度融合理念的持续推动,安防行业作为AI技术落地应用较为领先的领域,率先受益于AI技术的成熟发展和应用。传统视频监控行业也面临着全新的挑战和机遇。将LiteCVR部署到其本地服务器上,但无法正常启动,出现了报错,请求协助。今天我们以此为案例,来介绍下排查......
  • Go plugin
    创建plugin_1.go&编译packagemainimport"fmt"funcGreet(namestring){fmt.Println("Hello",name)}gobuild-buildmode=plugin-oxxxx.soplugin_1.go加载和使用这个plugin:packagemainimport("plugin""log&quo......
  • 集合框架(三)ArrayList的常见使用
    ArrayList是什么?ArrayList是Java集合中的数组列表,实现了List接口,是用来存储数据的容器之一,底层的数据结构是数组。 ArrayList有什么特点?有序:按照顺序添加元素不唯一:同一元素可以存放多次查找和访问速度较快,增删元素较慢 ArrayList和LinkedList的区别有哪些?数据机构:Arr......
  • java集合框架(二)之LinkedList的常见使用
     常用的方法定义LinkedList对象  新增  删除 获取元素 修改 ......