settimeout mdn(Node.js的HTTP与事件初步介绍&怎么查看API)

2025-04-03 13:50:02 0

settimeout mdn(Node.js的HTTP与事件初步介绍&怎么查看API)

本文目录

Node.js的HTTP与事件初步介绍&怎么查看API

Node.js的HTTP与事件初步介绍&如何查看API(入门篇)  Node.js的HTTP与事件初步介绍&如何查看API(入门篇)  接着第一篇来说,当然,同样约定下面简称为Node(个人认为比较标准的说法),标题用node.js主要是为了方便阅读。同样,大牛可以略过这篇文章啦!现在,主要说3个问题:(1)接着第一篇介绍完Http其他部分(2)事件模型的介绍(3)如何查看API 文档.  首先感谢下网友hellostory,修改下上一篇的程序的bug。  一、修改前一篇的程序bug      二、接着说HTTP其他部分  因为HTTP是Node的核心模块,因此,接着上一篇,把HTTP模块讲完。  1、 var upload=new Upload(); //设置事件监听 upload.on(’init’,function(){ console.log(’文件格式、字符集、大小判断....’); }); upload.on(’checkOk’,function(){ console.log(’检测完毕....’); }); upload.on(’over’,function(){ console.log(’上传成功....OK’); }); //触发事件 upload.emit(’init’); upload.emit(’checkOk’); upload.emit(’over’);

如何使用HTML5实现全屏API

现在主流浏览器基本上实现了全屏效果,但是不同浏览器实现不一样:【进入和退出全屏】// Webkit (works in Safari5.1 and Chrome 15)element.webkitRequestFullScreen();document.webkitCancelFullScreen();// Firefox 10+element.mozRequestFullScreen();document.mozCancelFullScreen();// W3C 提议element.requestFullscreen();document.exitFullscreen();//进入全屏function requestFullScreen() {var de = document.documentElement;if (de.requestFullscreen) {de.requestFullscreen();} else if (de.mozRequestFullScreen) {de.mozRequestFullScreen();} else if (de.webkitRequestFullScreen) {de.webkitRequestFullScreen();}}//退出全屏function exitFullscreen() {var de = document;if (de.exitFullscreen) {de.exitFullscreen();} else if (de.mozCancelFullScreen) {de.mozCancelFullScreen();} else if (de.webkitCancelFullScreen) {de.webkitCancelFullScreen();}}//调用document.body.addEventListener(’click’,function(){requestFullScreen();//5秒钟自动退出全屏setTimeout(function(){exitFullscreen();},5000);},false);检查全屏状态变化 Detecting fullscreen state changedocument.addEventListener(“fullscreenchange“, function () {fullscreenState.innerHTML = (document.fullscreen)? ““ : “not “;}, false);document.addEventListener(“mozfullscreenchange“, function () {fullscreenState.innerHTML = (document.mozFullScreen)? ““ : “not “;}, false);document.addEventListener(“webkitfullscreenchange“, function () {fullscreenState.innerHTML = (document.webkitIsFullScreen)? ““ : “not “;}, false);css的全屏样式 Styling fullscreen在css中,我们有几个伪类来给全屏设置样式,一般是 full-screen 这个伪类,然后会自动再全屏的时候生效html:-moz-full-screen {background: red;}html:-webkit-full-screen {background: red;}html:fullscreen {background: red;}全屏状态下的键盘输入 Full screen with key input为了安全原因,很多情况下全屏输入都是被阻塞禁止的,但是chrome允许通过下面的API来允许键盘输入docElm.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); 这个只在chrome支持,其他浏览器不支持。firefox计划使用requestFullscreenWithKeys 方法来支持鼠标输入,但是会触发用户通知已保证安全。firefox10以上,chrome 15和safari5.1以上都支持了。

实现promise.all方法

1- Promise.all 的用法

逆向的去实现功能,最关键的前提是准确了解API,输入、输出、和注意事项。

这里直接引用MDN:

Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败 promise 的结果。

MDN后面也给出了详细说明:

此方法在集合多个promise的返回结果时很有用。

完成(Fulfillment):

  • 如果传入的可迭代对象为空,Promise.all会同步地返回一个已完成(resolved)状态的promise。

  • 如果所有传入的promise都变为完成状态,或者传入的可迭代对象内没有promise,Promise.all返回的promise异步地变为完成。

  • 在任何情况下,Promise.all返回的promise的完成状态的结果都是一个数组,它包含所有的传入迭代参数对象的值(也包括非promise值)。

  • 失败/拒绝(Rejection):

    如果传入的promise中有一个失败(rejected),Promise.all异步地将失败的那个结果给失败状态的回调函数,而不管其它promise是否完成。

    个人感觉MDN解释的比较清楚了,还是云里雾里的话,可以反复细品一下上面的说明。或者结合下面的代码去理解。

    2 - 手动实现Promise.all

    面试美团的时候,面试官看我写不出来,就说“既然你知道了输入和输出是什么,应该能写出来了....”。

    面试官其实不是在鄙视我“我不行”,而是在试图引导我的思路,只是当时自己编程思路太差,最后还是没写出来。

    但是面试官的提示,确实是一个很好的思考思路。 先不管完整的Promise.all代码是什么样子,甚至包括优化啥的。先想想“Promise.all(iterable) 方法返回一个 Promise实例“,就这么简单的一句话怎么写呢?

  • function myPromiseAll(arr) {  // 参数是一个iterable对象,一般是数组
  •   // 返回一个Promise实例
  •    return new Promise((resolve, reject) =》 {
  •        resolve(“面试官让我写一个Promise.all“);
  •        // 或者
  •        // reject(“我太笨了,写不出来“);
  •        
  •    });
  • }
  • let pResult = myPromiseAll();  // 先不要去想数组有没有元素
  • pResult.then(value=》{
  •    console.log(value);  // 输出: 面试官让我写一个Promise.all
  • }, err=》{
  •    console.log(err);
  • })
  • 好了,如过看懂了,那么最重要的一步就完成了。是不是很简单。

    接下来,只要根据MDN的说明,一步步完善内部函数的功能就行了。

    我们先从“完成”情况下手:完成(Fulfillment):

  • A. 如果传入的可迭代对象为空,Promise.all会同步地返回一个已完成(resolved)状态的promise。

  • B. 如果所有传入的promise都变为完成状态,或者传入的可迭代对象内没有promise,Promise.all返回的promise异步地变为完成。

  • C. 在任何情况下,Promise.all返回的promise的完成状态的结果都是一个数组,它包含所有的传入迭代参数对象的值(也包括非promise值)。

  • 请先看C,在完成情况下,会始终返回一个数组.

  • function myPromiseAll(arr) {
  •    // 定义一个数组
  •    let result = ;
  •    return new Promise((resolve, reject) =》 {
  •        // 现在只考虑 “在完成情况下” ,会返回一个数组
  •        resolve(result);
  •      
  •        
  •    });
  • }
  • let pResult = myPromiseAll();
  • pResult.then(value=》{
  •    console.log(pResult);  // 输出 Promise { 《state》: “fulfilled“, 《value》: }
  •    console.log(value); // 输出:
  • })
  • 那么下面来实现B,B里有分两种情况:

  • 元素是Promise实例

  • 元素不是Promise实例

  • 那先考虑元素不是Promise实例,从简单的开始

  • function myPromiseAll(arr) {
  •    let result = ;
  •    return new Promise((resolve, reject) =》 {
  •        for(let i = 0; i 《 arr.length; i++) {
  •            result.push(arr);
  •        }
  •        resolve(result);
  •      
  •        
  •    });
  • }
  • let pResult = myPromiseAll();  // 元素不是Promise实例
  • pResult.then(value=》{
  •    console.log(pResult); // 输出:  Promise { 《state》: “fulfilled“, 《value》: (3) }
  •    console.log(value); // 输出: Array(3)
  • })
  • 最难的来了,元素都是Promise实例呢?别慌,先写顶层设计,再想细节(自上向下编程)

  • function myPromiseAll(arr) {
  •    let result = ;
  •    return new Promise((resolve, reject) =》 {
  •        for(let i = 0; i 《 arr.length; i++) {
  •            
  •            if(/*如果是Promise实例*/) {
  •                
  •            } else {
  •                result.push(arr);
  •            }
  •        }
  •        // 先想想,resolve放在这里,对不对?
  •        resolve(result);
  •      
  •        
  •    });
  • }
  • 继续完善

  • function myPromiseAll(arr) {
  •    let result = ;
  •    return new Promise((resolve, reject) =》 {
  •        // 数组为空,直接resolve了
  •        if(arr.length == 0) {
  •            resolve(result);
  •        }
  •        for(let i = 0; i 《 arr.length; i++) {
  •            
  •            if(arr.then) { // 若元素是Promise实例,则会有then函数,这里只是简单的作为判断标准
  •                
  •                // 元素是Promise
  •                arr.then(value =》 {
  •                    console.log(value);
  •                    result.push(value);
  •                    // 想一想什么时候resolve呢?--- 所有Promise实例都完成了
  •                    if(result.length == arr.length) {
  •                       console.log(“所有都完成了“)
  •                        resolve(result);
  •                    }
  •                })
  •                
  •            } else {
  •                result.push(arr);
  •                // 这段代码跟上面重复,想想,能不能提取放到外面,会出现什么情况呢?
  •                if(result.length == arr.length) {
  •                    resolve(result);
  •                }
  •            }
  •        }
  •    });
  • }
  • let p1 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 2000, “P1 resolved“);
  • })
  • let p2 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 3000, “P2 resolved“);
  • })
  • let p3 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 4000, “P3 resolved“);
  • })
  • let pResult = myPromiseAll();
  • pResult.then(value=》{
  •    console.log(pResult);
  •    console.log(value);
  • })
  • // 输出
  • // P1 resolved
  • // P2 resolved
  • // P3 resolved
  • // 所有都完成了
  • // Promise { 《state》: “fulfilled“, 《value》: (3) }
  • // Array(3)
  • 完成情况写完了,还剩失败情况:

  • 如果传入的 promise 中有一个失败(rejected),Promise.all 异步地将失败的那个结果给失败状态的回调函数,而不管其它 promise 是否完成。

  • function myPromiseAll(arr) {
  •    let result = ;
  •    return new Promise((resolve, reject) =》 {
  •        // 如果数组为空,直接返回空数组
  •        if(arr.length == 0) {
  •            resolve(result);
  •        }
  •        for(let i = 0; i 《 arr.length; i++) {
  •            
  •            if(arr.then) { // 若元素是Promise实例,则会有then函数,这里只是简单的作为判断标准
  •                
  •                // 元素是Promise
  •                arr.then(value =》 {
  •                    console.log(value);
  •                    result.push(value);
  •                    // 想一想什么时候resolve呢?
  •                    if(result.length == arr.length) {
  •                        console.log(“所有都成功了“)
  •                        resolve(result);
  •                    }
  •                }, err =》 {
  •                    console.log(“很不幸,其中一个失败了“);
  •                    // 注意到没, 这里没有像上面的判断 result.length == arr.length, 为什么?
  •                    // 只要碰到 resolve 或 reject ,就结束了
  •                    reject(err);
  •                })
  •                
  •            } else {
  •                result.push(arr);
  •                // 这段代码跟上面重复,想想,能不能提取放到外面,会出现什么情况呢?
  •                if(result.length == arr.length) {
  •                    resolve(result);
  •                }
  •            }
  •        }
  •    });
  • }
  • let p1 = new Promise((resolve, reject)=》 {
  •    setTimeout(reject, 2000, “P1 rejected“);
  • })
  • let p2 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 3000, “P2 resolved“);
  • })
  • let p3 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 4000, “P3 resolved“);
  • })
  • let pResult = myPromiseAll();
  • pResult.then(value=》{
  •    console.log(pResult);  // 是输出成功
  •    console.log(value);
  • }, err =》 {
  •    console.log(pResult);   // 还是输出失败呢?
  •    console.log(err);
  • })
  • // 输出
  • // 很不幸,其中一个失败了
  • // Promise { 《state》: “rejected“ }
  • // P1 rejected
  • // P2 resolved
  • // P3 resolved
  • 为什么最后还是输出了 P2 和 P3 的结果呢? 这是因为,尽管遇到了P1就reject了,然而 P2 和 P3 仍在执行。注意MDN说的是“不管其他Promise是否完成”,而不是“其他Promise被stop”。

  • let p2 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 3000, “P2 resolved“);
  • })
  • let p3 = new Promise((resolve, reject)=》 {
  •    setTimeout(resolve, 4000, “P3 resolved“);
  • })
  • let pResult = myPromiseAll();
  • pResult.then(value=》{
  •    console.log(pResult);
  •    console.log(value); // 输出
  • }, err =》 {
  •    console.log(pResult);
  •    console.log(err);

settimeout mdn(Node.js的HTTP与事件初步介绍&怎么查看API)

本文编辑:admin

更多文章:


insertinto格式(insert into 到底哪里错了)

insertinto格式(insert into 到底哪里错了)

本文目录insert into 到底哪里错了sql数据库insert into values的数据格式是怎么规定的用insert into怎么一次插入多个元组SQL中插入记录语句格式是什么insert into 到底哪里错了zl998100

2025年2月18日 12:40

arguments用法(parameter和argument有何区别)

arguments用法(parameter和argument有何区别)

本文目录parameter和argument有何区别java script求教js函数传参,使用arguments计算参数值this.method.apply(this,arguments) 这样的用法是什么意思parameter和argu

2025年2月13日 00:10

delphi 2010(Delphi 2010 如何设置Exe输出路径)

delphi 2010(Delphi 2010 如何设置Exe输出路径)

本文目录Delphi 2010 如何设置Exe输出路径delphi10和delphi2010区别delphi2010 怎么设置编译出来的exe文件的位置delphi2010中都用什么报表控件delphi 2010 如何安装组件Delphi2

2025年4月2日 23:50

quartz表达式(Quartz 每月1号,执行规则表达式怎么列)

quartz表达式(Quartz 每月1号,执行规则表达式怎么列)

本文目录Quartz 每月1号,执行规则表达式怎么列Quartz时间表达式quartz怎么使用正则表达式quartz 每天0点5分开始,以后每隔15分钟启动一次,23:50停止,这个表达式怎么写quartz cron表达式 每周一0点怎么设

2025年2月10日 22:10

securecrt激活教程(如何,激活,SecureCRT,方法图解)

securecrt激活教程(如何,激活,SecureCRT,方法图解)

本文目录如何,激活,SecureCRT,方法图解怎么激活securecrt8.1求securecrt mac破解版如何,激活,SecureCRT,方法图解SecureCRT 7.0.4-x64 安装及注册方法 首先下载以下文件 Secure

2025年2月27日 19:10

怎么才能设计出精美的网页我做出来的比较粗糙?如何制作简单精美的网页

怎么才能设计出精美的网页我做出来的比较粗糙?如何制作简单精美的网页

本文目录怎么才能设计出精美的网页我做出来的比较粗糙如何制作简单精美的网页怎么详细制作一个精美的网页啊结合网页三剑客制作精美网页步骤什么软件可以制做出精美的网页如何制作出一个精美的网页怎样才能制作出漂亮的网页怎么才能设计出精美的网页我做出来的

2025年2月16日 20:40

udp转发是什么意思(端口转发时UDP与TCP的区别)

udp转发是什么意思(端口转发时UDP与TCP的区别)

本文目录端口转发时UDP与TCP的区别udp协议的用途端口转发时UDP与TCP的区别Udp接收到应用协议的某个消息(已编码为二进制)后,不会分包,但是要记录当前数据包的大小(消息大小加上8个字节头部),然后交给IP层。而TCP接收到应用层协

2025年3月12日 14:20

携程旅行app官方下载12306(为什么携程网上抢票那里需要登录12306)

携程旅行app官方下载12306(为什么携程网上抢票那里需要登录12306)

本文目录为什么携程网上抢票那里需要登录12306携程旅行网登录12306账号不对怎么回事为什么最近手机下载的携程和12306,都不能网上购票啊不是维护,就是到13点开售,到了13点又显手机网上买火车票怎么买,需要下什么APP,急买火车票的软

2025年3月27日 06:40

revoked(revoked是什么意思)

revoked(revoked是什么意思)

本文目录revoked是什么意思撤销分公司revokedrevoked是什么意思revoked撤销双语对照词典结果:revokedadj.取消的; v.撤销,取消,废除( revoke的过去式和过去分词 ); 很高兴为您解答如果你对这个答案

2025年3月17日 18:50

衣柜英语closet怎么读(衣柜的英文)

衣柜英语closet怎么读(衣柜的英文)

本文目录衣柜的英文“衣柜”的英文怎么说衣柜是closet还是wardrobe衣柜的英文衣柜的英文是wardrobe,口语中最常用的是wardrobe。这些单词的区别是意思不同wardrobe是衣柜,Closet是小衣橱,chest是五斗橱,

2025年3月11日 18:10

韦东山嵌入式linux(学习嵌入式Linux怎么应用开发)

韦东山嵌入式linux(学习嵌入式Linux怎么应用开发)

本文目录学习嵌入式Linux怎么应用开发初学者如何学习嵌入式如何学习嵌入式Linux驱动我是学生,学嵌入式Linux买哪个开发板好一些呢韦东山的JZ2440怎么样免费视频看起来很不错嵌入式开发视频谁的比较好韦东山,朱有鹏兄弟我想学习嵌入式开

2025年2月13日 10:20

c语言strcpy头文件(C语言strcpy的用法)

c语言strcpy头文件(C语言strcpy的用法)

本文目录C语言strcpy的用法C++里如果想用gets,puts,strcmp,strcpy在头文件怎么写C语言strcpy的用法你看好了:char a = “abcde“strcpy(&a, a)函数是逐个字符拷贝,首先拷贝第一个字符,

2025年3月5日 18:20

photoshop cs6完全自学教程(中文版Photoshop CS6完全自学教程的内容简介)

photoshop cs6完全自学教程(中文版Photoshop CS6完全自学教程的内容简介)

本文目录中文版Photoshop CS6完全自学教程的内容简介Photoshop CS6完全自学教程的内容简介想自学ps 目前手上只有CS6 买什么书比较合适Photoshop CS6中文版软件基础知识入门到精通完全自学视频教程中文版Pho

2025年3月30日 09:40

pushstate popstate(js怎么解决popstate多个页面连续返回问题)

pushstate popstate(js怎么解决popstate多个页面连续返回问题)

本文目录js怎么解决popstate多个页面连续返回问题如何判断popstate是hash改变还是前进后退为什么微信内置浏览器回退后100%触发popstate事件html5 pushState使用js怎么解决popstate多个页面连续返

2025年2月20日 11:30

openal(谁知道OpenAL是干什么的)

openal(谁知道OpenAL是干什么的)

本文目录谁知道OpenAL是干什么的OpenAL是什么啊openal32.dll是什么文件谁知道OpenAL是干什么的OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站

2025年3月11日 07:50

角膜塑形镜的利与弊(角膜塑形镜的利与弊有哪些)

角膜塑形镜的利与弊(角膜塑形镜的利与弊有哪些)

本文目录角膜塑形镜的利与弊有哪些角膜塑形镜的利与弊到底是什么角膜塑形镜的利与弊有哪些,有知道的人能够讲一讲吗角膜塑形镜的利与弊角膜塑形镜的利与弊有哪些1、弊端除了护理不当可能引起角膜损伤以外,角膜塑形镜只限于在500度以内近视。另外其价格比

2025年2月20日 17:30

android多少钱(我想找人开发一个安卓APP,需要多少钱)

android多少钱(我想找人开发一个安卓APP,需要多少钱)

本文目录我想找人开发一个安卓APP,需要多少钱不知开发一个android的app需要多少钱安卓系统每年赚中国多少钱开发一个android的app需要多少钱安卓机不用了能买多少钱现在有安卓系统的多少钱一部我想找人开发一个安卓APP,需要多少钱

2025年3月2日 21:30

buddy什么意思中文(buddy有好姐妹的意思吗)

buddy什么意思中文(buddy有好姐妹的意思吗)

本文目录buddy有好姐妹的意思吗buddy和friend的区别是什么美俚语中buddy和dude有什么区别buddy有好姐妹的意思吗答: buddy做名词多表示朋友、同伴、老兄和搭档的意思,作动词表示交往、结交和交朋友。作名词表示老兄的意

2025年3月29日 19:40

struts1工作原理(struts的工作原理是什么)

struts1工作原理(struts的工作原理是什么)

本文目录struts的工作原理是什么Struts1的工作原理sturts2的原理是什么,和struts1有什么不同请说的简明易懂一点语言尽量跟下文差不多易懂struts1与struts2的区别struts框架的设计原理是什么Struts1的

2025年3月9日 01:30

js转换日期格式(js中怎么将日期字符串转换为日期格式)

js转换日期格式(js中怎么将日期字符串转换为日期格式)

本文目录js中怎么将日期字符串转换为日期格式js 如何把字符串转化为日期js中怎么将日期字符串转换为日期格式《!doctype html》《html》《head》《meta charset=“utf-8“》《title》《/title》《/

2025年2月20日 20:40

近期文章

warning(warning什么意思)
2025-04-03 14:50:01
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:16
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索