回调函数

对Promise的研究2

丶灬走出姿态 提交于 2020-02-24 10:01:19
3.Promise.prototype.then() Promise 实例具有 then 方法,也就是说, then 方法是定义在原型对象 Promise.prototype 上的。它的作用是为 Promise 实例添加状态改变时的回调函数。前面说过, then 方法的第一个参数是 resolved 状态的回调函数,第二个参数(可选)是 rejected 状态的回调函数。 then 方法返回的是一个新的 Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用链式写法,即 then 方法后面再调用另一个 then 方法。 getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // ... }); 上面的代码使用 then 方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。 采用链式的 then ,可以指定一组按照次序调用的回调函数。这时,前一个回调函数,有可能返回的还是一个 Promise 对象(即有异步操作),这时后一个回调函数,就会等待该 Promise 对象的状态发生变化,才会被调用。 getJSON("/post/1.json").then(function(post) { return

7.1.3 常见异常处理结构形式

不羁岁月 提交于 2020-02-24 07:49:23
  Python提供了多种不同形式的异常处理结构,基本思路都是一致的:先尝试运行代码,然后处理可能发生的错误。在实际使用时可以根据需要选择使用哪一种。   1 try ... except ...   Python异常处理结构中最基本的额结构是 try ... except ... 结构。其中 try 子句中的代码块包含可能会引发异常的语句,而except子句用来捕捉相应的异常。如果try子句中的代码块引发异常并被except子句捕获,则执行except子句的代码块;如果try中的代码扩没有出现异常则继续往下执行浴场处理结构后面的代码;如果出现异常但没有被except捕获,则继续往外抛出;如果所有层都没有捕获并处理该异常,则程序崩溃并将该异常呈现给最庸用户,这是我们最不希望发生的事情。该结构语法如下:    try:   #可能会引发异常的代码 except Exception[ as resaon]:   #如果try中的代码抛出异常并被except捕捉,就执行这里的代码 1 while True: 2 x = input('Please input:') 3 try : 4 x = int(x) 5 print('you have input {0}'.format(x)) 6 break 7 except Exception as e: 8 print('Error.') 9

PHP数组处理总结

空扰寡人 提交于 2020-02-23 19:06:42
一、数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖) in_array("apple",$arr);在数组中检索apple array_search("apple",$arr);在数组中检索apple ,如果存在返回键名 array_key_exists("apple",$arr);检索给定的键名是否存在数组中 isset($arr[apple]):检索给定的键名是否存在数组中 数组的内部指针 current($arr);返回数组中的当前单元 pos($arr);返回数组中的当前单元 key($arr);返回数组中当前单元的键名 prev($arr);将数组中的内部指针倒回一位 next($arr);将数组中的内部指针向前移动一位 end($arr);将数组中的内部指针指向最后一个单元 reset($arr;将数组中的内部指针指向第一个单元 each($arr);将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位 list($key,$value)=each($arr);获得数组当前元素的键名和值 数组和变量之间的转换 extract($arr)

jQuery的deferred对象

a 夏天 提交于 2020-02-23 10:35:54
deferred对象是异步的,主要用来代替回掉函数,阮一峰说deferred对象是jquery的回掉函数的解决方案。 主要解决如何处理耗时的问题,提供了很好的控制和统一的接口。 1.“ $.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作 ”我目前的理解是他返回的还是XHR对象,只不过支持了promise的方法和属性。 所以可以这样写 $.ajax(url).done(fn1).fail(fn2) 2.deferred运行自由添加多个回调函数 $.ajax(url).done(fn1).fail(fn2).done(fn3);会按照顺序执行 3.可以为多个操作指定同一个回调函数,比如之前的通过$.when(ajax1,ajax2).done(fn1); 4. promise是deferred对象的一个方法, jQuery提供了 deferred.promise() 方法。它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。 摘自 http:/

python 跨域处理方式

ぃ、小莉子 提交于 2020-02-21 17:04:36
因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送http请求 浏览器的同源策略(SOP/same origin policy)是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS(跨站脚本攻击 cross site scripting)和CSRF(跨站请求伪造cross-site request forgery)等攻击。 (同源 origin:协议,域名,端口号,不清楚的话,直接在浏览器控制台中输入window.location.origin看看返回值就知道了。) 下面两种情况,是不受跨域限制的,严格来讲,这两种情况只是跨站资源请求:   1)页面中的链接,重定向及表单提交是不受同源策略限制的   2)跨域资源的引入,如<script src=""> <image src=""> <iframe>等 从上面的第二种情况,我们可以发现,但凡通过src去获取非同源状态的资源时,都是不受跨域限制的,那我们就可以想想,是否可以借助这种跨站资源请求的方式来实现http跨域请求呢?这就是我们接下来要说的第一种跨域解决方案:jsonp 1、JSONP(不仅限于python,所有的GET请求都可以使用jsonp实现跨域)   1

jquery发生ajax请求

给你一囗甜甜゛ 提交于 2020-02-21 12:41:21
底层封装 调用方法: $.ajax({}) 常用参数 async :异步与同步(true/false(默认true异步)) type :请求方式http(默认get) url :请求地址 success :回调函数 dataType :服务器返回的数据类型(text/xml/json) Cache :是否缓存(true/false()),默认缓存 contentType :发生请求时的内容编码类型(application/x-www-form-urlencoded) Data :字符串,发生请求的数据 $ . ajax ( { url : '1.php' , type : 'get' , async : 'true' , dataType : 'json' , success : function ( msg ) { console . log ( msg ) //自动将json数据转换为js对象 } } ) 2.ajax高层封装(只能发送异步请求) 2.1 $.get(地址,回调函数,返回数据类型) 2.2 $.post('地址',{id:1,name:34},回调函数,返回数据类型) 跨域(没有post请求) 通过jsonp 在域名下通过js获取另一个域名下的资源 1.底层封装的jsonp跨域请求技术 $ . ajax ( { url : 'http://www.jsonp

深入理解 JavaScript 事件循环(一)— event loop

限于喜欢 提交于 2020-02-18 22:04:56
引言   相信所有学过 JavaScript 都知道它是一门单线程的语言,这也就意味着 JS 无法进行多线程编程,但是 JS 当中却有着无处不在的 异步 概念 。在初期许多人会把异步理解成类似多线程的编程模式,其实他们中有着很大的差别,要完全理解异步,就需要了解 JS 的运行核心—— 事件循环(event loop) 。在之前我对事件循环的认识也是一知半解的,直到我看了 Philip Roberts 的演讲 What the heck is the event loop anyway? ,我才对事件循环有了一个全面的认识,所以我想写一篇介绍 JS 事件循环的文章,以供大家学习和参考。 一、为什么会有异步?   为什么 JS 当中会有异步?我们想象一下,如果我们同步的执行一下代码会发生什么: 1 $.get(url, function(data) { 2 //do something 3 });   在我们使用 ajax 进行通信的时候,我们都默认了它是异步的,但是如果我们设置其为同步执行,会发生什么?如果你自己写一个小的测试程序,将后台代码延迟5s你会发现浏览器会出现阻塞,直到 ajax 响应了之后才会正常运行。这便是异步模式要解决的首要问题,如何使浏览器非阻塞的运行任务。想象一下如果我们同步的执行 ajax 请求的话,我们的等待的时间是一个未知数,在网络通信中可能很快也可能很慢

js 异步实现与编程

点点圈 提交于 2020-02-18 21:28:22
同步 同步 同步是代码从上到下依次执行,上一个任务结束后,才能执行下一个任务。 如下图所示,任务1执行完后,再执行任务2,任务2执行完后再执行任务3,依次类推... 同步优势 同步是任务有序进行,不会造成资源上处理上的混乱。 1.任务有序进行较好的处理了任务之间的依赖性,如后一个任务需要前一个任务的结果。 2.如果多个任务处理同一个资源,不会造成资源处理的混乱。 var a = 1; function task1(){   console.log(a);   for(var i = 0; i <10000;i++){     a++; }   console.log(a); } function task2(){   console.log(a);   for(var i = 0; i <10000;i++){     a--; }   console.log(a); } task1(); task2(); task1、task2都操作变量a。先执行task1, 执行完 task1后得到一个a的结果值。然后task2处理task1处理的结果值。 如果task1与task2不是同步的,task1没有执行完,去执行task2,task2执行一会,再去执行task1,... ,可能a的值都不是task1、 task2想要的结果。 同步弊端 同步上从上到下依次执行的,必须等到上个任务完成

Node.js的知识点框架整理

别等时光非礼了梦想. 提交于 2020-02-18 19:44:33
背景: 因为appium是基于Node.js的,所以想看一下Node.js。但是发现很多资料的顺序看起来有点颠倒。然后就一面看资料一面整理了一下大概的知识点框架,希望对自己对别人有用。 本文不包含node.js的基本语法。node.js的基本语法和JavaScript基本一样,可以以后再单独整理一份基本语法的。 Node.js是一个基于chrome V8的JavaScript运行时的环境 Node.js是事件驱动,非阻塞式I/O模型 Node.js使用npm包管理器 使用Node.js不仅实现了一个应用,也实现了整个HTTP服务器,所以不需要单独搭建Apache或nginx Node.js安装 mac下安装方法 brew install node 查看node.js的版本 node -v 查看包管理工具npm版本 npm -v 进入node.js的交互式解释器 node 交互式解释器和python的类似。可以输入命令实时查看输入结果 npm的使用 npm随着node一起被安装 npm允许用户从NPM服务器下载并安装第三方包,也允许将自己编写的包上传到第三方服务器,类似python的pip npm安装命令 npm install 【包名】 安装的包放在工程目录的node_modeles目录下,例如mac上是在/usr/local/lib/node_modules文件夹下