回调函数

nodejs基础知识点

谁都会走 提交于 2019-12-05 13:53:45
var http = require("http");载入 http 模块,并将实例化的 HTTP 赋值给变量 http 使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口 函数通过 request, response 参数来接收和响应数据 可以使用下划线 _ 获取上一个的结果 ctrl + d 退出 Node 命令 .clear 退出多行表达式 Node.js 异步编程的直接体现就是回调.回调函数一般作为函数的最后一个参数出现. 非阻塞调用,不需要等待文件读取完,不需要按顺序的,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。 非阻塞式IO或者事件驱动IO,webserver一直接受请求而不等待任何读写操作。 var events = require('events');引入 events 模块 var eventEmitter = new events.EventEmitter();创建 eventEmitter 对象 events 模块只提供了一个对象: events.EventEmitter。 EventEmitter 的核心就是事件触发与事件监听器功能的封装。 on(event, listener),on 函数用于绑定事件函数。接受一个字符串 event 和一个回调函数。 emit(event,

微信小程序onLaunch异步,首页onLoad先执行?

谁都会走 提交于 2019-12-05 11:20:26
本来按照事件顺序,小程序初始化时触发App里的onLaunch,后面再执行页面Page里的onLoad,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。 //app.js App({ onLaunch: function () { console.log('onLaunch'); wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { }, success: function(res) { console.log('onLaunch-request-success'); // 将employId赋值给全局变量,提供给页面做判断 this.globalData.employId = res.employId; } }) }, globalData: { employId: '' } }) //index.js //获取应用实例 const app = getApp() Page({ data: { albumDisabled: true, bindDisabled: false }, onLoad: function () { console.log('onLoad'); console.log('onLoad app.globalData.employId = ' + app

JS基础 —— 跨域

↘锁芯ラ 提交于 2019-12-05 10:56:00
为什么会跨域 浏览器的同源策略(MDN:https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy) URL:协议://域名:端口/路径/文件名?参数1&参数2#锚 如果两个页面的协议、域名(主机)、端口相同,则两个页面同源 目的:限制从这个源加载的文档或脚本与来自另一个源的资源进行交互,隔离潜在恶意文件。 跨域举个栗子 https://domain-a.com的网页用XMLHttpRequest请求https://domain-b.com/data.json 跨域解决方案 document.domain 适用于主域相同,子域不同的 脚本可以将 document.domain 的值设置为其当前域或其当前域的父域。如果将其设置为其当前域的父域,则这个较短的父域将用于后续源检查。 例如:假设 http://store.company.com/dir/other.html 文档中的一个脚本执行以下语句,则页面将会成功地通过对 http://company.com/dir/page.html 的同源检测(假设http://company.com/dir/page.html 将其 document.domain 设置为“company.com”,以表明它希望允许这样做) document.domain =

Promise

北城余情 提交于 2019-12-05 07:09:44
Promise的含义   Promise是异步编程的一种方式,相比于传统的回调函数,更容易理解和查阅,同时可以避免回调地狱的问题 特点:   1.状态不被外界影响,只会受到异步操作结果的影响,如在读取网络数据的时候,读取不到就是失败(pending->rejected),成功就是(pending->fulfilled)   2.状态被改变之后不能再次变化,只能变化一次.  使用方式:实现将异步任务 同步化 new Promise((resolve,reject)=>{//new Promise()返回的是一个 Promise对象,then()返回的也是Promise对象 //主线程执行 //code resolve(value); //value就是then方法中的data参数 ,最后执行该函数 //code 即使上面已经修改了状态但是也可执行,异步任务的执行放到最后。 }).then(function(data){//异步执行 前一个Promise的状态会决定后一个Promise的状态,并执行哪个函数。 //状态为fulfilled   return json.post ;// then()返回的Promise对象,而then的回调函数返回的结果是下一个Promise回调函数的参数。 },function(e){ //状态为rejected }).catch((e)=>{  /

关于异步

为君一笑 提交于 2019-12-05 04:45:00
以前读书的时候,看到关于金融的一段注解: 金融是指将一些大众可以明白的简单道理 用华丽的辞藻给高端化,同时将浅显的道理给包装起来 不让别人轻易明白这其中的原有 我想说 这不就是骗人吗?这不就是把骗人 这个单词给包装成金融了吗?然后骗人本身也变成了高端化了。。。 然而现在我们浮躁的技术圈 也走这个套路了,非要整一些高大上的名词,非要把简单的问题给复杂化,美其名曰 优雅 ,当我听到优雅这个词 我幻听了,因为这个词和强调 逻辑 强调流程的技术 怎么能够搭边呢? 比如说异步这个问题,异步本来是因为js单线程的原因 需要解决网络请求 阻塞而创造出的一个概念,他使用回调函数来解决这个一部问题,后来 为了更友好一点,我们使用promise,其底层还是使用回调函数,到这里 其实就可以了,但是后面我们还创造了 Generator async,这些东西, 回调函数 promise Generator async都是异步的解决方案,他们之间有优劣之分吗?是否出现了async我们就永远不使用promise了,出现了promise 使用回调函数就要被鄙视? 来源: https://www.cnblogs.com/mrzhu/p/11906859.html

jQuery的deferred对象详解

感情迁移 提交于 2019-12-05 03:18:53
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。 通常的解决方法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。 但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了 deferred对象 。 简单说,deferred对象就是jQuery的回调函数解决方案。 在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。 它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。它的主要功能,可以归结为四点。下面我们通过示例代码,一步步来学习。 二、ajax操作的链式写法 jQuery的ajax操作,传统写法是这样的: $.ajax({ url: "test.html", success: function(){ alert("哈哈,成功了!"); }, error:function(){ alert("出错啦!"); } }); (运行 代码示例1 ) 在上面的代码中,$.ajax()接受一个对象参数,这个对象包含两个方法:success方法指定操作成功后的回调函数

什么是回调函数?

孤街浪徒 提交于 2019-12-05 02:52:19
我在一个github的代码上看到有命名为Callback的函数。 我今天之前对回调函数的概念都不清除,回调函数是什么?如何使用以及有什么优势?带着这三个问题。利用费曼学习法的精神,我把我理解的概念整理复盘,加深印象。 什么是编程类型 ? 首先,在知道回调函数的概念前,需要清楚另外一个编程类型的概念。 编程分为两种类型:系统编程以及应用编程。 系统编程的对象是API,编程人员使用库进行开发,库是开发的底层结构,是开发人员利用的工具和服务。系统编程基于库的编程。 而应用编程是程序员开发应用需要编写的程序,编写的程序调用库中的函数暴露出的接口,实现编程人员的功能需求。 明显看出上述可以分成两个不同的抽象层次,底层我称之为库层,上一层称为应用层。 什么是回调函数? 回调函数在应用层,作为API的参数被库层调用。 这里可以举一个例子说明一下这之间的管理。 酒店一般会为客户提供叫醒服务。但是客户可以选择如何被叫醒。可以是服务员到时敲门,可以是电话叫醒,可以是用一桶水泼醒,这几种方式最为客户的意愿 告诉酒店。 很明显,酒店的叫醒服务是库层的API服务,这里换个说法,叫做中间函数。而客户的意愿是回调函数。 A-B还是A-b-c? 网上很多说法是中间函数调用了回调函数,是A-b关系。但是实际上回调函数是A-b-c的关系。 我们不要忽略了调用中间函数的对象,我把它称为初始函数。

有效的minidump(二)

一笑奈何 提交于 2019-12-05 02:34:06
函数MiniDumpCallback 如果要自定义MINIDUMP类型标志无法访问的MINIDUMP的内容,可以使用MiniDumpCallback函数。这是一个用户定义的回调,当MiniDumpWriteDump需要用户决定是否将某些数据包含到minidump中时,它将被调用。借助此功能,我们可以完成以下任务: 从minidump的模块信息中排除可执行模块(全部或部分) 从minidump的线程信息中排除线程(全部或部分) 将用户指定范围内存的内容包含到小型转储中 让我们看看MiniDumpCallback函数的声明 BOOL CALLBACK MiniDumpCallback( PVOID CallbackParam, const PMINIDUMP_CALLBACK_INPUT CallbackInput, PMINIDUMP_CALLBACK_OUTPUT CallbackOutput ); 函数接收三个参数。第一个参数( CallbackParam )是回调函数的用户定义上下文(例如,指向C++对象的指针)。第二个参数(CallbackInput)包含MiniDumpWriteDump传递给回调的数据。第三个参数(CallbackOutput)包含回调返回到MiniDumpWriteDump的数据(该数据通常指定应包含在minidump中的信息)。

借用PortAudio采集和播放音频,实现一个双路混音器(转)

半腔热情 提交于 2019-12-05 02:01:03
转自: http://www.cnblogs.com/haibindev/archive/2011/12/07/2277366.html  混音,顾名思义,就是把多个音源混合的过程,是一个很常见的应用。这两天我也做了一个双路混音器,当然,我没有做多么专业的音频信号处理,只是一个简单的混音,调节各路音量,并实现了一些音效处理。主要功能有:采集硬件设备,读取wav文件,播放,混音,音量调节,音频节奏、音调的调节,wav文件输出。这么多功能,我们不需要一个一个全部自己实现,有时候,借助开源项目,尤其是比较成熟的开源项目,不但可以大大节省开发时间,还能使程序更加稳定。即便不能直接在自己的项目中使用,也能有借鉴意义。这个项目中我就使用了PortAudio,PortAudio是一个开源的、跨平台的音频IO库,它主要提供了音频采集和播放的接口,而且API非常简单。大家可以尝试一下。   下图就是该项目产品截图:   所有的功能呢,在界面上是一目了然了,其中有三个子窗口,是音频数据经FFT(快速傅立叶)变换后显示的频谱图,左右两个分别是两路音频的,中间则是混音后的。这里我和大家分享一下这个混音器的设计思路以及PortAudio的使用,希望有需求的朋友能够有所借鉴。 首先是程序的逻辑架构图   PortAudio在项目中主要负责采集硬件设备和播放内存中的音频Sample

Scrapy——Spider

半城伤御伤魂 提交于 2019-12-05 01:16:26
import scrapy.Spider Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据,总的来说spider就是定义爬取的动作以及分析某个网页。 Spider是最简单的spider。每个其他的spider必须继承自该类(包括Scrapy自带的其他spider以及自己编写的spider)。 Spider并没有提供什么特殊的功能。 其仅仅提供了 start_requests() 的默认实现,读取并请求spider属性中的 start_urls , 并根据返回的结果(resulting responses)调用spider的 parse 方法。 工作流程: 以初始的URL初始化Request,并设置回调函数,当该request下载完毕并返回时,将生成response,并作为参数传给回调函数. spider中初始的request是通过父类列start_requests()方法调用make_requests_from_url()来获取的。start_requests()获取 start_urls中的URL,并以parse以回调函数生成Request 在回调函数内分析返回的网页内容,可以返回Item对象,或者Dict,或者Request,以及是一个包含三者的可迭代的容器,返回的Request对象之后会经过Scrapy处理,下载相应的内容