1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{}"); alert(b);//true 2.for in 循环判断 var obj = {}; var b = function() { for(var key in obj) { return false; } return true; } alert(b());//true 3.jquery的isEmptyObject方法 此方法是jquery将2方法(for in)进行封装,使用时需要依赖jquery var data = {}; var b = $.isEmptyObject(data); alert(b);//true 4.Object.getOwnPropertyNames()方法 此方法是使用Object对象的getOwnPropertyNames方法,获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空 注意:此方法不兼容ie8,其余浏览器没有测试 var data = {}; var arr = Object.getOwnPropertyNames(data); // Object.keys(objTest).length alert(arr.length == 0);//true 5.使用ES6的Object.keys()方法 与4方法类似,是ES6的新方法, 返回值也是对象中属性名组成的数组 var data = {}; var arr = Object.keys(data); alert(arr.length == 0);//true from:https://www.cnblogs.com/jpfss/p/9105119.html
View Details两种方法 方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var arry = [...]; Promise.all(arry.map(function(elem){ return new Promise(function(resolve, reject){ ... resolve(result); }) })).then(function(data){ //在这就可以等所有的返回结果可以得到 }) |
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var arry = [...]; var counter = 0; arry.forEach(function(elem){ //异步回调中 counter++; if(counter === arr.length){ //在这执行所有执行的完后的 } }) |
from:https://www.cnblogs.com/ttjm/p/13065240.html
View DetailsExtJs的store默认是异步的,但有时候我们必须要发送同步请求才能满足需求,比如在多线程中,要实现同步很简单,只需继承Ext.data.proxy.Ajax,重写的同步类如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Ext.define('Ext.ux.data.proxy.Ajax', { extend: 'Ext.data.proxy.Ajax', async:true, doRequest: function(operation, callback, scope) { var writer = this.getWriter(), request = this.buildRequest(operation); if (operation.allowWrite()) { request = writer.write(request); } Ext.apply(request, { async : this.async, binary : this.binary, headers : this.headers, timeout : this.timeout, scope : this, callback : this.createRequestCallback(request, operation, callback, scope), method : this.getMethod(request), disableCaching: false }); Ext.Ajax.request(request); return request; } }); |
使用的时候,只需修改代理即可,async:false表示同步,true为异步:
1 2 3 4 5 6 7 8 |
proxy: Ext.create("Ext.ux.data.proxy.Ajax",{ async:false, url:" ", reader: { type: 'json', root: 'root' } }) |
from:https://my.oschina.net/wangdaoliang/blog/776567
View Details1.服务配置文件
1 2 |
cd /etc/systemd/system touch your_service_name.service |
1 2 3 4 5 6 |
[Unit] Description=zaomianbao [Service] ExecStart= /your_java_path/bin/java -jar /your_app_path/your_app_name.jar [Install] WantedBy=multi-user.target |
2.启动服务
1 |
systemctl start your_service_name.service |
参考: https://blog.csdn.net/weixin_37490221/article/details/80758276
View Details直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉。以下方法可让jar运行后一直在后台运行。 方法一 java -jar xxx.jar & 说明: 在末尾加入 & 符号 方法二 (1)执行java -jar xxx.jar后 (2)ctrl+z 退出到控制台,执行 bg (3)exit 完成以上3步,退出SHELL后,jar服务一直在后台运行。 方法三 nohup java -jar xxxx.jar & 将java -jar xxxx.jar 加入 nohup &中间,也可以实现 from:https://www.cnblogs.com/zsg88/p/9473843.html
View Detailswin10系统支持默认编码修改.。 好处: 1.解决由utf8引起的cmd,powershell等乱码问题 2.Visual Studio 2017(其他版本没试过) 新建文件则默认为utf8 3.其他 可能的坏处: 上古版本的第三方应用软件可能会出现乱码。 由于此设置,微软官方特别说明为【beta版】(截至时间2018年10月3日),可能会引起其他未知问题,请充分考虑后再决定是否设置。 工具/原料 win10系统 方法/步骤 在小娜中搜索地区,最佳匹配中会显示【更改国家或地区】的系统设置,双击打开。 在打开的设置中点击右上角的【管理语言设置】。 然后会打开一个【区域】的窗口设置,然后点击左上角的【管理】标签。 标签切换以后,点击【更改系统区域设置】。这个需要管理员权限才能操作。 然后回打开一个【区域设置】的小窗口,有个【beta版:使用Unicode UTF-8 提供全球语言支持】的选项,打上勾,点击确定。 然后会出现一个提示【现在重新启动】的窗口,点击【现在重新启动】按钮即可。 from:https://jingyan.baidu.com/article/25648fc1471e6a9191fd002e.html
View Details一般情况WebApi都是跨域请求,没有设置跨域一般会报以下错误
1 |
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:48057' is therefore not allowed access. |
ASP.net Core 跨域有两种,全局和区域 全局跨域: 打开Startup.cs文件.在ConfigureServices方法中添加以下代码 1.配置跨域处理,允许所有来源:
1 2 3 4 5 |
//配置跨域处理,允许所有来源: services.AddCors(options => options.AddPolicy("自定义的跨域策略名称", p => p.AllowAnyOrigin()) ); |
2.允许一个或多个具体来源:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//允许一个或多个具体来源: services.AddCors(options => { // Policy 名稱 CorsPolicy 是自訂的,可以自己改 options.AddPolicy("跨域规则的名称", policy => { // 設定允許跨域的來源,有多個的話可以用 `,` 隔開 policy.WithOrigins("http://localhost:3000","http://127.0.0.1") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); |
以上两种按需求选择一种即可. Configure方法中添加以下代码
1 2 |
app.UseCors("自定义的跨域策略名称");//放到host之后【光子:20201021】 app.UseMvc(); |
局部跨域第一种用法: 1.ConfigureServices方法不变,删去Configure中的app.UseCors()方法 2.在Controller顶部或者Action方法顶部加上[EnableCors("自定义的跨域策略名称")]特性,例如
1 2 3 |
[EnableCors("自定义的跨域策略名称")] [Route("api/[controller]")] public class ContactController : Controller |
以上就可实现指定某个controller或者action跨域 禁止跨域: 禁止跨域在Controller或者Action加上[DisableCors]特性即可禁止跨域
1 2 3 4 5 6 |
[HttpGet("{id}")] [DisableCors] public string Get(int id) { return "value"; } |
参考: https://blog.johnwu.cc/article/asp-net-core-cors.html?from=singlemessage&isappinstalled=0 https://docs.microsoft.com/en-us/aspnet/core/security/cors http://www.cnblogs.com/tianma3798/p/6920704.html from:https://www.cnblogs.com/xiaoliangge/p/7650465.html
View Detailspromise是什么? 1、主要用于异步计算 2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果 3、可以在对象之间传递和操作promise,帮助我们处理队列 为什么会有promise? 为了避免界面冻结(任务) 同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。 异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。 AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。 异步操作的常见语法 事件监听
1 2 3 4 5 6 |
document.getElementById('#start').addEventListener('click', start, false); function start() { // 响应事件,进行相应的操作 } // jquery on 监听 $('#start').on('click', start) |
回调
1 2 3 4 5 6 7 8 9 10 11 |
// 比较常见的有ajax $.ajax('http://www.wyunfei.com/', { success (res) { // 这里可以监听res返回的数据做回调逻辑的处理 } }) // 或者在页面加载完毕后回调 $(function() { // 页面结构加载完成,做回调逻辑处理 }) |
有了nodeJS之后…对异步的依赖进一步加剧了 大家都知道在nodeJS出来之前PHP、Java、python等后台语言已经很成熟了,nodejs要想能够有自己的一片天,那就得拿出点自己的绝活: 无阻塞高并发,是nodeJS的招牌,要达到无阻塞高并发异步是其基本保障 举例:查询数据从数据库,PHP第一个任务查询数据,后面有了新任务,那么后面任务会被挂起排队;而nodeJS是第一个任务挂起交给数据库去跑,然后去接待第二个任务交给对应的系统组件去处理挂起,接着去接待第三个任务…那这样子的处理必然要依赖于异步操作 异步回调的问题: 之前处理异步是通过纯粹的回调函数的形式进行处理 很容易进入到回调地狱中,剥夺了函数return的能力 问题可以解决,但是难以读懂,维护困难 稍有不慎就会踏入回调地狱 – 嵌套层次深,不好维护 回调地狱 一般情况我们一次性调用API就可以完成请求。 有些情况需要多次调用服务器API,就会形成一个链式调用,比如为了完成一个功能,我们需要调用API1、API2、API3,依次按照顺序进行调用,这个时候就会出现回调地狱的问题 promise promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外) 并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据 代码风格,容易理解,便于维护 多个异步等待合并便于解决 promise详解
1 2 3 4 5 6 7 8 9 10 |
new Promise( function (resolve, reject) { // 一段耗时的异步操作 resolve('成功') // 数据处理完成 // reject('失败') // 数据处理出错 } ).then( (res) => {console.log(res)}, // 成功 (err) => {console.log(err)} // 失败 ) |
resolve作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。 promise有三个状态: 1、pending[待定]初始状态 2、fulfilled[实现]操作成功 3、rejected[被否决]操作失败 当promise状态发生改变,就会触发then()里的响应函数处理后续步骤; promise状态一经改变,不会再变。 Promise对象的状态改变,只有两种可能: 从pending变为fulfilled 从pending变为rejected。 这两种情况只要发生,状态就凝固了,不会再变了。 最简单示例:
1 2 3 4 5 6 7 |
new Promise(resolve => { setTimeout(() => { resolve('hello') }, 2000) }).then(res => { console.log(res) }) |
分两次,顺序执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
new Promise(resolve => { setTimeout(() => { resolve('hello') }, 2000) }).then(val => { console.log(val) // 参数val = 'hello' return new Promise(resolve => { setTimeout(() => { resolve('world') }, 2000) }) }).then(val => { console.log(val) // 参数val = 'world' }) |
promise完成后then()
1 2 3 4 5 6 7 8 9 10 |
let pro = new Promise(resolve => { setTimeout(() => { resolve('hello world') }, 2000) }) setTimeout(() => { pro.then(value => { console.log(value) // hello world }) }, 2000) |
结论:promise作为队列最为重要的特性,我们在任何一个地方生成了一个promise队列之后,我们可以把他作为一个变量传递到其他地方。 假如在.then()的函数里面不返回新的promise,会怎样? .then() 1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败) 2、.then()返回一个新的Promise实例,所以它可以链式调用 3、当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行 4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null; 5、如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行 6、如果返回其他任何值,则会立即执行下一级.then() .then()里面有.then()的情况 1、因为.then()返回的还是Promise实例 2、会等里面的then()执行完,再执行外面的 then嵌套 对于我们来说,此时最好将其展开,也是一样的结果,而且会更好读: 展开增加可读性 错误处理 Promise会自动捕获内部异常,并交给rejected响应函数处理。 第一种错误处理 第一种错误处理 第二种错误处理 第二种错误处理 错误处理两种做法: 第一种:reject('错误信息').then(() […]
View Details
1 2 3 4 5 6 7 8 |
{ // 进行路由配置,规定'/'引入到home组件 path: '/', component: resolve => require(['../pages/home.vue'], resolve), meta: { title: 'home' } }] |
这是异步加载组件,当你访问 / ,才会加载 home.vue。 路由懒加载的一种写法 也可以用import
1 2 3 4 5 6 7 |
{ path: '/', component: () => import('../pages/home.vue'), meta: { title: 'home' } } |
vue-router中,require代替import解决vue项目首页加载时间过久的问题 vue的路由配置文件(routers.js),一般使用import引入的写法,当项目打包时路由里的所有component都会打包在一个js中,在项目刚进入首页的时候,就会加载所有的组件,所以导致首页加载较慢, 而用require会将component分别打包成不同的js,按需加载,访问此路由时才会加载这个js,所以就避免进入首页时加载内容过多。 require: 运行时调用,理论上可以运用在代码的任何地方, import:编译时调用,必须放在文件开头 如果使用import方式,还需要安装一个插件 https://blog.csdn.net/hong10086/article/details/89684772 作者:凤箫之舞 链接:https://www.jianshu.com/p/487a600824af 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View DetailsDocker CE 镜像源站 使用官方安装脚本自动安装 (仅适用于公网环境)
1 |
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
手动安装帮助 (阿里云ECS可以通过内网安装,见注释部分内容) Ubuntu 14.04 16.04 (使用apt-get进行安装)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# step 1: 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 2: 安装GPG证书 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # Step 3: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # Step 4: 更新并安装 Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce 注意:其他注意事项在下面的注释中 # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # apt-cache madison docker-ce # docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial) # sudo apt-get -y install docker-ce=[VERSION] # 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2、Step 3中的命令 # 经典网络: # curl -fsSL http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # VPC网络: # curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # sudo add-apt-repository "deb [arch=amd64] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" |
CentOS 7 (使用yum进行安装)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start 注意:其他注意事项在下面的注释中 # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。 # vim /etc/yum.repos.d/docker-ce.repo # 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1 # # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages # Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos) # sudo yum -y install docker-ce-[VERSION] # 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。 # yum list docker-ce-selinux- --showduplicates | sort -r # sudo yum -y install docker-ce-selinux-[VERSION] # 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令 # 经典网络: # sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo # VPC网络: # sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo |
安装校验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@iZbp12adskpuoxodbkqzjfZ:$ docker version Client: Version: 17.03.0-ce API version: 1.26 Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 07:52:04 2017 OS/Arch: linux/amd64 Server: Version: 17.03.0-ce API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 07:52:04 2017 OS/Arch: linux/amd64 Experimental: false |
参考资料 其他关于旧版本Docker卸载以及测试开发版本Docker安装的帮助,可以参考官方文档的说明进行安装 from:https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.35501991rH2jyp
View Details